我正在编写一个使用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)
有没有办法在运行中只删除其中一个事件连接?
答案 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,因此您缺少其特定地址来删除它。