2012-04-25 15 views
5

Ich habe ein Formular in VB.NET, das als ein Dialogfeld in einem Hauptformular verwendet wird. Ihre Instanzen sind immer lokal definiert, es gibt kein Feld dafür. Wenn der Benutzer im Dialogfeld auf die Schaltfläche OK klickt, wird ein Ereignis mit genau einem Argument ausgelöst, einer Instanz einer meiner Klassen.Wie Ereignishandler lokale Variable in VB.NET hinzufügen

Da es immer eine lokale Variable ist, wie kann ich einen Ereignishandler für dieses Ereignis hinzufügen? Ich habe für mich gesucht und etwas gefunden, aber ich kann es nicht wirklich herausfinden ...

-Code für das Ereignis, ein Feld in MyDialog:

public Event ObjectCreated(ByRef newMyObject as MyObject) 

-Code für das Hauptformular Dialog aufrufen : (nie die Syntax beachten)

Dim dialog As New MyDialog() 
dialog.ShowDialog(Me) 
AddHandler ObjectCreated, (what do I put here?) //Or how do I add a handler? 

Wie Sie sehen können, bin ich fest auf, wie man einen Handler für meine Veranstaltung hinzufügen. Kann mir jemand helfen? Am besten mit dem besten Weg, es zu tun ...

Antwort

6

Es wird aus Gründen der Konsistenz empfohlen, dass Sie das gleiche Quell- und Ereignisargumentmodell wie alle Systemereignishandler verwenden.

Ihre eigene Klasse erstellen von EventArgs erben, wie:

Public Class MyObjectEventArgs 
    Inherits EventArgs 

    Public Property EventObject As MyObject 

End Class 

Dann wird Ihr Ereignis erklären, und ein Handler-Methode, wie:

Public Event ObjectCreated As EventHandler(Of MyObjectEventArgs) 

Private Sub Container_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs) 
    ' Handler code here 
End Sub 

Dann den Handler zu Ihrem Event befestigen mit:

AddHandler ObjectCreated, AddressOf Container_ObjectCreated 

Zusätzlich können Sie die Handles an den ev anschließen ent aus dem Hauptformular angehoben (vorausgesetzt, der Name Mainform), wie folgt:

Private Sub MainForm_ObjectCreated(ByVal sender As Object, ByVal e As MyObjectEventArgs) Handles MainForm.ObjectCreated 
    ' Handler code here 
End Sub 
+0

kristallklar gesetzt werden, danke. – MarioDS

+0

@MarioDeSchaepmeester Ich dachte, deine Frage beinhaltete "Am besten mit dem besten Weg, es zu tun ...". Warum würdest du meine Antwort abmelden? –

+0

Nun, mir wurde sofort klar, dass ich deine angenommen habe, sorry für die Verwirrung. – MarioDS

1

Sie müssen das Unterprogramm schreiben, die das Ereignis tatsächlich ausführt, wenn generiert wird:

public Sub OnObjectCreated(ByRef newMyObject as MyObject) 
    ... 
End Sub 

Dann wird der Handler hinzugefügt :

AddHandler ObjectCreated, AddressOf OnObjectCreated 

Als eine Randnotiz tut ByRef hier nichts. Alle Objekte in VB werden als Referenz übergeben. Nur primitave Variablen (string, int usw.) verwenden standardmäßig ByVal und können auf ByRef

+0

Wow, das ist viel einfacher ... Alles, was ich eigentlich vermisst habe, war das AdressOf-Schlüsselwort! – MarioDS