VB.NET中同一事件的多个事件处理程序

yom*_*yne 4 vb.net event-handling visual-studio

我为这个TextBox.Leave活动写了两个事件处理程序TextBox1

这样做的原因是第一个处理程序是用于TextBox.Leave验证值的多个事件的公共处理程序,第二个处理程序是特定于上面TextBox1执行某些值计算的处理程序.

我的问题是,我可以知道两个处理程序中的哪一个会在TextBox1.Leave发生时首先执行吗?

(我知道我可以将公共处理程序中的代码删除到特定的处理程序TextBox1,但我仍然想知道是否有办法.)

谢谢

Ste*_*art 11

只要使用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
Run Code Online (Sandbox Code Playgroud)

  • 我敢肯定它不是完全随意的.顺序将由编译器确定,因此一旦编译程序集,它应始终保持不变,但我不知道编译器是否保证每次构建时顺序都相同.我也不知道编译器的每个版本是否使用相同的顺序.我会说,如果顺序很重要,请使用`AddHandler`语句在代码中显式设置顺序.如果不出意外,它将在以后更明显. (2认同)