5

TextBox.Leaveのイベント用に 2 つのイベント ハンドラーを作成しました。TextBox1

これは、最初のハンドラーが値を検証する複数のTextBox.Leaveイベントに共通のハンドラーであり、2 番目のハンドラーが値の計算を行う上記のイベントに固有であるためTextBox1です。

私の質問は、発生したときに 2 つのハンドラーのどちらが最初に実行されるかを知ることができるかということTextBox1.Leaveです。

(コードを共通ハンドラから特定のハンドラに削除できることは知っていますTextBox1が、それでも方法があるかどうか知りたいです。)

ありがとう

4

2 に答える 2

12

ステートメントを使用してイベント ハンドラーが追加されている限り、イベント ハンドラーは追加さAddHandlerれたのと同じ順序で呼び出されることが保証されます。一方、Handlesイベント ハンドラー メソッドで修飾子を使用している場合、順序がどうなるかを確認する方法はないと思います。

AddHandlerが呼び出された順序によって決定される順序を示す簡単な例を次に示します。

Public Class FormVb1
    Public Class Test
        Public Event TestEvent()

        Public Sub RaiseTest()
            RaiseEvent TestEvent()
        End Sub
    End Class

    Private _myTest As New Test()

    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        AddHandler _myTest.TestEvent, AddressOf Handler1
        AddHandler _myTest.TestEvent, AddressOf Handler2
        _myTest.RaiseTest()
        RemoveHandler _myTest.TestEvent, AddressOf Handler1
        RemoveHandler _myTest.TestEvent, AddressOf Handler2
    End Sub

    Private Sub Handler1()
        MessageBox.Show("Called first")
    End Sub

    Private Sub Handler2()
        MessageBox.Show("Called second")
    End Sub
End Class
于 2012-09-25T17:49:51.577 に答える
3

単一のハンドラを持つように変更し、どのテキストボックスが残っているかを検出することをお勧めします:

Private Sub txt_Leave(sender As Object, e As System.EventArgs) Handles TextBox1.Leave, TextBox2.Leave
  Dim txt As TextBox = DirectCast(sender, TextBox)
  If txt Is TextBox1 Then
    txt.Text = "Very important textbox!"
  Else
    txt.Text = "Boring textbox ho hum."
  End If
End Sub
于 2012-09-26T02:30:40.337 に答える