我正在编写一个小型 2D 引擎,使用 Lua 来控制它。过去一段时间我一直在 Lua 和 VB.net 之间设置事件。我意识到,问题是我似乎无法删除那些搞砸了很多事情的事件(因为它们在应该完成的时候被调用)。为了解决这个问题,我想添加某种方法来删除特定的事件处理程序。
我知道如何添加事件处理程序:
AddHandler Button1.Click, AddressOf Button1Clicked
但考虑到这一点,他们是否有办法删除 VB.net 中的特定事件处理程序?
Thanks!
EDIT
抱歉,我没有很好地解释这一点:
如果我有这个:
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)
有没有一种方法可以即时删除其中一个事件连接?
只需使用以下语句:
RemoveHandler Button1.Click, AddressOf Button1Clicked
请记住,可以多次注册 EventHandler。如果是这样,您将按照注册处理程序的频率接收该事件。因此,删除处理程序只会删除一项注册,并且您仍然会收到按钮事件。
Edit:
顺便说一句:您的编辑中的示例看起来不像标准事件处理程序(发送者作为对象,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,因此您缺乏其特定地址来删除它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)