在vb.net中仅删除一个特定的事件处理程序

时间:2011-12-13 10:45:22

标签: vb.net event-handling

我正在编写一个使用Lua来控制它的小型2D引擎。在过去的这段时间里,我一直在Lua和VB.net之间设置事件。我已经意识到,问题在于我似乎无法删除那些搞砸了很多东西的事件(因为它们在应该完成时被调用)。为了解决这个问题,我想添加某种方法来删除特定的事件处理程序。

我知道如何添加事件处理程序:

AddHandler Button1.Click, AddressOf Button1Clicked

但考虑到这一点,他们是一种在VB.net中删除特定事件处理程序的方法吗?

谢谢!

修改

对不起,我没有解释得很清楚:

如果我有这个:

public sub setupevent(byval func as LuaFunction)
    AddHandler Me.event_mouseup, Sub(x As Integer, y As Integer)
        func.Call(x, y)
    End Sub
end sub

(Somewhere else)

setupevent(someLuaFunction)
setupevent(someOtherLuaFunction)
setupevent(JustAnotherLuaFunction)

有没有办法在运行中只删除其中一个事件连接?

1 个答案:

答案 0 :(得分:9)

只需使用以下声明:

RemoveHandler Button1.Click, AddressOf Button1Clicked

请记住,可以多次注册EventHandler。如果是这样,您将在注册处理程序时经常注意该事件。因此删除处理程序只会删除一个注册,您仍然会收到按钮事件。

编辑:
顺便说一下:你的编辑中的示例看起来不像标准事件处理程序(发件人作为对象,e作为EventArgs)
通常,您可以使用以下方法添加和删除句柄:

Public Sub FirstHandler(sender As object, e As EventArgs)
 ' …
End Sub

Public Sub SecondHandler(sender As object, e As EventArgs)
 ' …
End Sub

某处:

AddHandler Button1.Click, AddressOf FirstHandler
AddHandler Button1.Click, AddressOf SecondHandler
RemoveHandler Button1.Click, AddressOf FirstHandler
' Only SecondHandler subscribed now

您正在使用lambda表达式作为EventHandler,因此您缺少其特定地址来删除它。