我想知道是否有任何方法可以在VB.net中组合事件。我正在使用一个Windows窗体,每个按钮有三个事件执行不同的操作。我想将所有三个事件放在一个方法中,但是我很难做到这一点。下面是其中一个按钮的示例。为了便于解决,我删除了每个子中的所有代码。
Private Sub btnRightPos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnRightPos.Click
End Sub
Private Sub btnRightPos_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles btnRightPos.MouseDown
End Sub
Private Sub btnRightPos_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles btnRightPos.MouseUp
End Sub
答案 0 :(得分:4)
MouseUp
和MouseDown
可以通过这样说Handles btnRightPos.MouseDown, btnRightPos.MouseUp
来组合。
Private Sub btnRightPos_MouseDownAndDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles btnRightPos.MouseDown, btnRightPos.MouseUp
End Sub
但是Button.Click不能与其他两个组合,因为它的事件处理程序具有不同的签名。
关于重用代码可以做的事情就是将公共逻辑分离到一个单独的函数中,然后从事件处理程序中调用该函数。
答案 1 :(得分:2)
这取决于。你关心这些论点吗?您需要sender
和e
吗?你可以将它们中的两个结合起来,如果你不关心这些参数,你可以将这三个结合起来。 Click的签名原因是不同的。由于Up和Down共享相同的签名,因此它们可以合并为:
Private Sub btnRightPos_UpAndDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles btnRightPos.MouseDown, btnRightPos.MouseUp
End Sub
如果想要将这三者结合起来:
Private Sub btnRightPos_All() Handles btnRightPos.Click, btnRightPos.MouseUp, btnRightPos.MouseDown
End Sub
VB.NET有一个有趣的功能,可以让你工作,你可以使用无参数方法来处理任何事件;有效地说“我不关心签名,让它有效”。
答案 2 :(得分:1)
您可以使用
轻松实现此目的AddHandler obj.OnEvent, AddressOf MyEventHandler
所以例如
private Default_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs)
然后
AddHandler btnRightPos.MouseUp, AddressOf Default_MouseUp
AddHandler btnLeftPos.MouseUp, AddressOf Default_MouseUp
答案 3 :(得分:-2)
这似乎是谨慎的做法。如果在一个中有一些不同的东西,则更容易修复。仅仅因为它们今天完全一样......
Private Sub btnRightPos_Click(sender As Object, _
ByVal e As System.EventArgs) _
Handles btnRightPos.Click
btnRightPosCommon(sender, e, "C")
End Sub
Private Sub btnRightPos_MouseDown(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles btnRightPos.MouseDown
btnRightPosCommon(sender, e, "D")
End Sub
Private Sub btnRightPos_MouseUp(ByVal sender As System.Object, _
ByVal e As System.Windows.Forms.MouseEventArgs) _
Handles btnRightPos.MouseUp
btnRightPosCommon(sender, e, "U")
End Sub
'common
Private Sub btnRightPosCommon(ByVal sender As System.Object, _
ByVal e As System.Object, Optional id As String = "")
Debug.WriteLine("{0} {1} {2}", sender.GetType, e.GetType, id)
End Sub