0

(初心者 VB.NET の質問)

winformsこれは、私が完全に理解していない単純なコードの背後にある特定のコードです。

Private Sub okButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles okButton.Click
    'do something
End Sub

Private Sub MainForm_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Enter
    okButton_Click(Me, e) '<=== argumanets must be wrong 
End Sub

私が達成しようとしていること: ユーザーがアクティブEnterになっているときにヒットした場合、のイベントハンドラーを起動しwinformsたいと思います。ClickokButton

event明らかに、上記から、被呼者に提供する必要がある引数についての私の理解okButton_Clickが欠けています。正しい引数とその理由は何ですか?

4

2 に答える 2

4

AcceptButtonフォームのプロパティを使用できると思います。目的のボタンに設定するだけで、うまくいくはずです。CancelButtonプロパティもあることに注意してください。

イベントの質問への回答:sender引数は、イベントの送信者を示します。ほとんどの場合、これはMeクラスのインスタンスです。私の意見では、Me絶対に正しいようです。e引数にはEventArgs、特定のイベントの が含まれます。関数本体でこの引数を使用していない場合、この変数の内容は重要ではありません。を使用するNothingか、単にルーティングすることができますEventArgs(それがあなたが行ったことです)。

あなたのコメントを参照してください: EventArgsは、イベント固有のデータの基本クラスです。たとえば、マウス イベントをサブスクライブしている場合はeMouseEventArgs. このMouseEventArgクラスは、押されたマウス ボタンと、イベントが発生したときのポインターの座標を提供します。

あなたの場合、イベントには、EventArgsイベントに関する基本的な情報のみを提供するものしかありません。特に情報はないようです。

注: 複数のイベントを 1 つのコールバックに結合する場合は、すべてがMicrosoft のガイドラインに従って継承する必要があるためe、型を作成できます。したがって、デリゲートの署名が一致するため、Button-Click と Mouse-Move を 1 つのコールバックに組み合わせることができます。EventArgseEventArgs

単にNothingターゲット Sub に渡すよりも優れた方法は、2 つのコールバックを 1 つに結合することです。Handles次のように複数を使用して、VB.NETでこれを行うことができます。

Private Sub SomeSub(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles okButton.Click, MyBase.Enter
    'this is getting called on a okButton.Click and MyBase.Enter
End Sub

(右にスクロールしてハンドルを表示します)

最初の Sub を呼び出す 2 番目の Sub は必要ないことに注意してください。すべてが 1 つのサブにあります。

于 2012-10-25T09:20:35.067 に答える
1

代わりにこれを試してください:

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean
    If (keyData And Keys.KeyCode) = Keys.Enter Then
        okButton.PerformClick()
        Return True
    End If
    Return MyBase.ProcessCmdKey(msg, keyData)
End Function

他のコントロールで Enter キーを使用する場合は、チェックでいくつかのコントロールを除外する必要がある場合があります。

If (keyData And Keys.KeyCode) = Keys.Enter AndAlso Not Textbox1.Focused Then
于 2012-10-25T07:43:41.623 に答える