Das Ereignismodell in Visual Basic ermöglicht es, auf Benutzeraktionen über Ereignis-Handler zu reagieren, die mit Steuerelementen verknüpft sind. Dies ist entscheidend für Anwendungen mit GUI (grafische Benutzeroberfläche), bei denen jedes Element eigene Ereignisse auslösen kann.
In klassischem VB6 wurde die Ereignisverarbeitung durch statisches Binding von Steuerelementen – Methoden realisiert. In VB.NET und WinForms wurde das Modell flexibler: Nun können mehrere Handler an ein Ereignis gebunden werden, und es wird dynamisches Binding mit AddHandler/RemoveHandler unterstützt.
Typische Schwierigkeit ist das dynamische Hinzufügen von Steuerelementen und die Verwaltung ihrer Ereignisse. Wenn man sich nicht von Ereignissen abmeldet oder den Handler falsch bindet, können Speicherverschwendung, doppelte Aufrufe und der Verlust der Kontrolle über das Verhalten der UI entstehen.
Beim dynamischen Erstellen von Steuerelementen verwenden Sie AddHandler zum Abonnieren und RemoveHandler, um den Handler korrekt zu entfernen. Achten Sie auf die Lebensdauer der Steuerelemente – wenn ein Steuerelement zerstört wird, müssen die Handler abgemeldet werden, andernfalls bleiben "hängende" Referenzen.
Code-Beispiel:
Dim btn As New Button() AddHandler btn.Click, AddressOf ButtonClickHandler ' ... RemoveHandler btn.Click, AddressOf ButtonClickHandler Sub ButtonClickHandler(sender As Object, e As EventArgs) MessageBox.Show("Schaltfläche gedrückt!") End Sub
Wichtige Merkmale:
Was passiert, wenn ein Ereignis-Handler mehrfach mit demselben Element verbunden wird?
Der Handler wird so oft aufgerufen, wie er über AddHandler hinzugefügt wurde, was zu unvorhergesehenem mehrfachen Ausführen der Logik führen kann.
AddHandler btn.Click, AddressOf Handler AddHandler btn.Click, AddressOf Handler ' Bei Drücken der Schaltfläche wird Handler 2 Mal aufgerufen
Kann man eine Methode mit Parametern verwenden, die von der Signatur des Ereignisses abweichen?
Nein, die Signatur der Handler-Methode muss streng mit dem Delegaten des Ereignisses übereinstimmen (z. B. Sub Handler(sender As Object, e As EventArgs)). Der Compiler gibt in diesem Fall einen Fehler aus.
Entfernt RemoveHandler alle Begegnungen des Handlers, wenn er mehrfach hinzugefügt wurde?
Nein, RemoveHandler entfernt nur ein Abonnement pro Aufruf. Wenn der Handler mehrfach hinzugefügt wurde, muss er entsprechend häufig entfernt werden, andernfalls bleibt ein Exemplar gebunden.
100 Schaltflächen werden dynamisch in einer Schleife erstellt, und allen wird ein Handler zugewiesen, aber RemoveHandler wird nicht aufgerufen. Nach dem Schließen des Formulars bleibt das Ereignis aktiv, was zu häufigen Fehlfunktionen führt.
Vorteile:
Nachteile:
Jedes dynamische Steuerelement in der Sammlung hat einen benannten Handler, und beim Entfernen des Steuerelements werden alle Handler in einer expliziten Schleife abgemeldet.
Vorteile:
Nachteile: