确定是否已附加事件

Sql*_*yan 7 vb.net events event-handling

我有两个对象 - 一个包含将触发事件的代码,另一个包含该事件的处理程序.我不能在第一个对象的Load中使用"AddHandler",因为第二个对象的实例尚不存在.当我举起我的事件时,我想检查一下object2的副本是否已被实例化(易于操作),以及是否已将事件附加到事件(不知道如何执行此操作).

我也接受另一个关于如何做到这一点的建议.如果我在Object1.Load中执行我的AddHandler,并且Object2尚不存在,那么它将永远不会处理我的事件,即使我稍后创建它也是如此.现在,在触发事件的代码中,我只是在每次引发事件时都使用了一个RemoveHandler然后是一个AddHandler,然后我知道当对象最终存在时我会附加,但我知道这个是一种糟糕的方法.

我看到一篇关于类似内容的文章(确定绑定到事件的事件处理程序列表),也许我在翻译中遗漏了一些内容,但是我无法让代码在VB.NET中处理我的自定义事件.

Jon*_*Jon 22

VB.Net以模式创建一个特殊的私有成员变量,<YourEvent>Event然后您可以使用它来测试Nothing.

Public Event MyClick As EventHandler

Private Sub OnMyClick()
    If MyClickEvent IsNot Nothing Then
        RaiseEvent MyClick(Me, New EventArgs())
    Else
        ' No event handler has been set.
        MsgBox("There is no event handler. That makes me sad.")
    End If
End Sub
Run Code Online (Sandbox Code Playgroud)

http://blogs.msdn.com/b/vbteam/archive/2009/09/25/testing-events-for-nothing-null-doug-rothaus.aspx


Nas*_*ggy 2

您也可以在挂钩事件之前检查一个布尔字段。

if not eventHooked then
 addhandler
 eventHooked = true
end if
Run Code Online (Sandbox Code Playgroud)

另外,如果您需要一个好的 c# 到 vb 转换器,http://www.tangiblesoftwaresolutions.com/有一个可以即时翻译 100 行或更少的内容,或者免费翻译 1000 行的项目。不仅如此,您还必须购买它,但通常这些限制就可以正常工作。不,我不是想为他们做广告:-)