我为TextBox.Leave
TextBox1
事件编写了两个事件处理程序
这样做的原因是第一个处理程序是用于验证值的多个TextBox.Leave
事件的公共处理程序,第二个处理程序特定于执行某些值计算的上述TextBox1
。
我的查询是,我可以知道在TextBox1.Leave
发生时,两个处理程序中的哪一个会先执行?
(我知道我可以将公共处理程序中的代码移除到TextBox1
的特定处理程序,但我仍然想知道是否有办法。)
由于
答案 0 :(得分: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
答案 1 :(得分:2)
我建议您更改为使用单个处理程序,并检测剩下哪个文本框:
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