在C#中如果我想创建一个“自定义事件”,你可以这样做:
private EventHandler _MyEvent;
Public Event EventHandler MyEvent
{
add{ _MyEvent += value; }
remove{ _MyEvent -= Value; }
}
protected void RaiseMyEvent()
{
if(_MyEvent != nul)
_MyEvent(this, EventArgs.Empty);
}
在VB中,这不是那么简单,我也无法在网上找到任何帮助。 这不起作用:
private _MyEvent as EventHandler
Public Custom Event MyEvent as EventHandler
AddHandler(ByVal value as EventHandler)
_MyEvent += value 'does not work
addhandler _MyEvent, value 'does not work
[Delegate].Combine(_MyEvent, value) '_MyEvent still nothing
End AddHandler
RemoveHandler(ByVal value as EventHandler)
'Same kind of stuff here
End RemoveHandler
RaiseEvent(sender as Object, e as EventArgs)
if(_MyEvent IsNot Nothing) Then '_MyEvent is always nothing
_MyEvent.Invoke(sender, e)
End If
End RaiseEvent
End Event
请帮忙。
答案 0 :(得分:11)
VB为你做了很多工作。
简单地宣布一个事件:
Public Event DidSomething(sender as object, e as EventArgs)
然后在代码中的任何地方,调用下降的提升事件
RaiseEvent DidSomething(me, EventArgs.Empty)
答案 1 :(得分:8)
委托是不可变的,因此方法“[Delegate] .Combine”返回新委托,但不修改参数。所以你需要:
_MyEvent = [Delegate].Combine(_MyEvent, value)
答案 2 :(得分:3)
...现在,如果您(或其他任何人在询问)如何创建处理引发事件的方法,基于“DidSomething”示例,您将按以下方式执行此操作:< / p>
Private Sub NowDoSomething(sender As Object, e As EventArgs) Handles Me.DidSomething
'Code for Event here
End Sub