2008-12-23 37 views
7

在C#中,如果我想創建一個「自定義事件」你做這樣的事情:「自定義事件」如何在VB.Net中工作?

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 

請幫忙。

回答

8

委託是不可變的,所以方法「[委託] .Combine」返回新的委託,但不修改參數。所以你需要:

_MyEvent = [Delegate].Combine(_MyEvent, value) 
+1

我剛剛發佈之前就已經想清楚了。謝謝! – Micah 2008-12-23 15:32:59

11

VB爲您混合了大量的工作。在代碼的任何地方

Public Event DidSomething(sender as object, e as EventArgs) 

然後,調用下跌引發事件

RaiseEvent DidSomething(me, EventArgs.Empty) 
3

...現在,如果你(或其他人的詢問)如何:

簡單地聲明事件創建方法處理該提出的事件,基於'DidSomething'的例子,你會這樣做如下:

Private Sub NowDoSomething(sender As Object, e As EventArgs) Handles Me.DidSomething 
    'Code for Event here 
End Sub 
相關問題