-1

ボタンクリックイベントをテキストボックスのkeypresseventに送りたいです。何をすべきか??

私のコードは

Private Sub TextBox1_KeyPress(ByVal sender As Object, _ 
       ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

    MessageBox.Show "Hai"
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click

   TextBox1_KeyPress(Sender,e)

End Sub

エラーは e から来ます

System.EventArgs および KeyPressEventArgs

4

1 に答える 1

3

そのようにイベントハンドラを直接呼び出すのは、常に悪いアプローチだと思います。

私の意見では、コードをリファクタリングし、Button_Click から呼び出したいコードを KeyPress イベントから抽出して直接呼び出す必要があります。

Private Sub TextBox1_KeyPress(ByVal sender As Object, _ 
       ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox1.KeyPress

    CommonCode()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click

    CommonCode()
End Sub


Private Sub CommonCode()
    MessageBox.Show "Hai"
End Sub

ただし、あなたのエラーは、Button1_Click で受け取った単純なものではないことをTextBox1_KeyPress期待しているという事実にあります。の新しいインスタンスを作成してに渡すことをバイパスできますが、前述したように、これは悪い習慣です。Windows またはフレームワークが、その内部コードから発生していないイベントへの呼び出しを意味のある方法で処理するとは考えないでください。KeyPressEventArgsEventArgsKeyPressEventArgsTextBox1_KeyPress

編集: KeyEventArgs のインスタンスを渡す方法を示すだけです。繰り返しますが、これはお勧めしません。

Private Sub Button1_Click(ByVal sender As System.Object, _
       ByVal e As System.EventArgs) Handles Button1.Click

    Dim x = new KeyPressEventArgs("A"c)
    CommonCode(e, x)
End Sub

Private Sub CommonCode(ByVal sender As Object, ByVal e KeyPressEventArgs)

    MessageBox.Show "KeyPressed = " + e.KeyChar.ToString
End Sub
于 2013-01-20T10:58:38.707 に答える