2008-12-23 12 views
7

En C# si desea crear un "Evento personalizado" haces algo como esto:¿Cómo funciona el "Evento personalizado" en 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); 
} 

En VB esto no es tan sencillo ni puedo encontrar ningún tipo de ayuda en cualquier lugar en la red. Esto no funciona:

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 

Por favor ayuda.

Respuesta

8

Los delegados son inmutables, por lo que el método "[Delegar] .Combinar" devuelve un nuevo delegado, pero no modifica los parámetros. Entonces usted necesita:

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

Me di cuenta de eso justo antes de publicar. ¡Gracias! – Micah

11

VB toma mucho del trabajo de la mezcla para usted.

Simplemente declarar un evento:

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

A continuación, en cualquier parte del código, llamar al evento caer Levante

RaiseEvent DidSomething(me, EventArgs.Empty) 
3

... y ahora si usted (o cualquier otra persona está pidiendo) cómo cree el método que maneja el evento planteado, basado en el ejemplo 'DidSomething' usted haría así como a continuación:

Private Sub NowDoSomething(sender As Object, e As EventArgs) Handles Me.DidSomething 
    'Code for Event here 
End Sub 
Cuestiones relacionadas