2008-12-23 15 views
7

W języku C#, jeśli chcę, aby utworzyć „niestandardowe zdarzenie” można zrobić coś takiego:Jak działa "Zdarzenie niestandardowe" w 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); 
} 

W VB nie jest to tak proste, ani mogę znaleźć żadnej pomocy gdziekolwiek w sieci. To nie działa:

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 

Proszę o pomoc.

Odpowiedz

8

Delegaci są niezmienni, dlatego metoda "[Delegat] .Combine" zwraca nowego delegata, ale nie modyfikuje parametrów. Więc potrzebujesz:

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

Właśnie to wymyśliłem, zanim napisałeś. Dzięki! – Micah

11

VB ma dla ciebie dużo pracy.

Wystarczy stwierdzenie zdarzenie:

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

Następnie gdziekolwiek w kodzie, należy zadzwonić pod spadającą Podnieść Event

RaiseEvent DidSomething(me, EventArgs.Empty) 
3

... a teraz Jeśli (lub ktoś prosi), jak utworzyć metodę, która podniosła zdarzenie na podstawie przykładu "DidSomething", tak jak poniżej:

Private Sub NowDoSomething(sender As Object, e As EventArgs) Handles Me.DidSomething 
    'Code for Event here 
End Sub 
Powiązane problemy