这里有一个特定过程中的两个处理程序,然后是如何获取已执行的事件处理程序。
例如
Private Sub TextBox1_Events(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox1.GotFocus
End Sub
如何获取发生的事件。
答案 0 :(得分:3)
可以使用StackTrace(可能是一种更好的方式,我不确定......)。请尝试以下代码。
Private Sub TextBox1_Events(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged, TextBox1.GotFocus
Dim s As New StackTrace(True)
For Each f As StackFrame In s.GetFrames
Debug.WriteLine(f.GetMethod.Name)
Next
End Sub
当文本框获得焦点时,将写入以下内容:
TextBox1_Events
OnGotFocus
OnGotFocus
WmSetFocus
Ect的......
当它是文本更改事件时
TextBox1_Events
OnTextChanged
OnTextChanged
等...
我确信你可以用这个写东西来做你需要的东西。但我完全同意其他人不同的处理程序更好。
答案 1 :(得分:2)
在这种情况下,你不能。
sender
属性e
参数有某种类型而不是EventArgs
(某些事件使用不同的参数类型),或者控件从{传递了某种类型派生的 {1}},然后您可以检查该变量的属性没有任何其他技巧可以使用,因为事件不会向处理程序提供任何类型的数据,指定发生了事件。
有了这两个事件,它们都将从同一个文本框发送,所以第一个选项就出来了。此外,对于这两个事件,他们只发送 EventArgs
类的实例(不是派生类),因此该选项已经用完。
最终,您将需要多个事件处理程序来解决此特定问题。
答案 2 :(得分:1)
这是不可能的。如果您需要知道发生了哪个事件,那么使用两个独立的处理程序总会更好。
答案 3 :(得分:1)
由于您正在处理由同一控件发出的2个事件(签名相似),因此最简单/最干净的解决方法是2个独立的事件处理程序(如Merlyn Morgan-Graham所建议):
Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
'the TextChanged specific code would go here
HandletTextBox1EventInternal(sender, e)
End Sub
Private Sub TextBox1_GotFocus(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.GotFocus
'the GotFocus specific code would go here
HandletTextBox1EventInternal(sender, e)
End Sub
Private Sub HandleTextBox1EventInternal(ByVal sender As System.Object, ByVal e As System.EventArgs)
'code common to GotFocus and TextChanged handlers
End sub