5

TextBox.Leave我已经为一个事件编写了两个事件处理程序TextBox1

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

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

(我知道我可以将代码从通用处理程序中删除到特定的 for 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 回答