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



我正在编写一个使用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)

是否有一种方法可以在飞行中删除这些事件连接中的一个?

只需使用以下语句:

RemoveHandler Button1.Click, AddressOf Button1Clicked

请记住,可以多次注册EventHandler。如果是这样,您将像注册处理程序一样频繁地接收事件。因此,删除处理程序只会删除一个注册,您仍然会收到button-event。

编辑:
顺便说一句:你的例子在你的编辑看起来不像一个标准的事件处理程序(发件人作为对象,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,所以你没有它的特定地址来删除它。

相关内容

  • 没有找到相关文章

最新更新