Gewusst wie: Schreiben von Ereignishandlern

Aktualisiert: November 2007

Wie Sie einen Ereignishandler erstellen, hängt davon ab, auf welche Weise Sie ihn mit Ereignissen verknüpfen möchten. Das Standardverfahren zum Erstellen eines Ereignishandlers besteht in der Verwendung des Handles-Schlüsselworts mit dem WithEvents-Schlüsselwort. Visual Basic bietet mit der AddHandler-Anweisung ein zweites Verfahren zum Behandeln von Ereignissen. AddHandler und RemoveHandler ermöglichen ein dynamisches Starten und Beenden der Ereignisbehandlung für ein bestimmtes Ereignis. Gehen Sie nach einer der beiden Methoden vor, verwenden Sie jedoch WithEvents und AddHandler nicht gleichzeitig für ein Ereignis.

Behandeln von Ereignissen mit "WithEvents"

Mit dem WithEvents-Schlüsselwort können Sie Objektvariablen auf Klassen- oder Modulebene erstellen, die zusammen mit der Handles-Klausel in Ereignishandlern verwendet werden können.

So behandeln Sie Ereignisse mit "WithEvents" und der Handles-Klausel

  1. Erstellen Sie eine einfache Klasse, die ein Ereignis enthält.

    Class Class1
        Public Event AnEvent(ByVal EventNumber As Integer)
    End Class
    
  2. Deklarieren Sie in der Klasse oder im Modul, die bzw. das das Ereignis behandelt, mit dem WithEvents-Schlüsselwort eine Objektvariable für die Ereignisquelle (siehe folgendes Beispiel):

    Public WithEvents ClassInst As Class1
    
  3. Wählen Sie im Code-Editor links in der Dropdownliste Klassenname die WithEvents-Variable aus, die Sie gerade deklariert haben.

  4. Wählen Sie in der Dropdownliste Methodenname auf der rechten Seite das zu behandelnde Ereignis aus. Der Code-Editor erstellt die Prozedur für den leeren Ereignishandler mit einer Handles-Klausel.

    Hinweis:

    Dieser Schritt ist optional. Sie können die Prozedur für den Ereignishandler manuell erstellen, vorausgesetzt, die Prozedur ist eine Unterroutine, verfügt über die entsprechende Argumentliste für das zu behandelnde Ereignis und enthält eine Handles-Klausel, die das zu behandelnde Ereignis angibt.

  5. Fügen Sie der Prozedur für den Ereignishandler unter Verwendung der bereitgestellten Argumente Code für die Ereignisbehandlung hinzu. Der folgende Code veranschaulicht dies:

    Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _
          Handles ClassInst.AnEvent
        MsgBox("Received event number: " & CStr(EventNumber))
    End Sub
    

Behandeln von Ereignissen mit "AddHandler"

Sie können mit der AddHandler-Anweisung Ereignisse dynamisch mit Prozeduren für Ereignishandler verknüpfen.

So behandeln Sie Ereignisse mit "AddHandler"

  1. Erstellen Sie eine Unterroutine zum Behandeln des Ereignisses (siehe folgendes Beispiel):

    Public Sub EHandler(ByVal EventNumber As Integer)
        MsgBox("Received event number " & CStr(EventNumber))
    End Sub
    
  2. Deklarieren Sie eine Objektvariable der Klasse, die die Quelle für die zu behandelnden Ereignisse ist. Anders als bei einer WithEvents-Variablen kann dies eine lokale Variable in einer Prozedur sein. Beispiel:

    Public Sub TestAddHandler()
        Dim CI As New Class1
    End Sub
    
  3. Geben Sie mithilfe der AddHandler-Anweisung den Namen des Ereignissenders an und mit der AddressOf-Anweisung den Namen des Ereignishandlers. Fügen Sie beispielsweise am Ende der TestAddHandler-Unterroutine folgenden Code hinzu:

    AddHandler CI.AnEvent, AddressOf EHandler
    

    Jede Prozedur kann als Ereignishandler verwendet werden, sofern sie die richtigen Argumente für das zu behandelnde Ereignis unterstützt.

Verwenden von "RemoveHandler" zum Anhalten der Ereignisbehandlung

Sie können mit der RemoveHandler-Anweisung Ereignisse dynamisch von Prozeduren für Ereignishandler trennen.

So halten Sie die Ereignisbehandlung mit "RemoveHandler" an

  • Geben Sie mithilfe der RemoveHandler-Anweisung den Namen des Ereignissenders an und mit der AddressOf-Anweisung den Namen des Ereignishandlers. Die Syntax für RemoveHandler-Anweisungen ähnelt immer der AddHandler-Anweisung, die zum Starten der Ereignisbehandlung verwendet wurde. Beispiel:

    RemoveHandler CI.AnEvent, AddressOf EHandler
    

Behandeln von Ereignissen, die aus einer Basisklasse geerbt wurden

Abgeleitete Klassen sind Klassen, die Merkmale von einer Basisklasse erben. Sie können mithilfe der HandlesMyBase-Anweisung Ereignisse behandeln, die von ihrer Basisklasse ausgelöst wurden.

So behandeln Sie Ereignisse aus einer Basisklasse

  • Deklarieren Sie einen Ereignishandler in der abgeleiteten Klasse, indem Sie der Deklarationszeile der Prozedur für den Ereignishandler eine Handles MyBase.Ereignisname-Anweisung hinzufügen. Dabei ist Ereignisname der Name des zu behandelnden Ereignisses in der Basisklasse. Beispiel:

    Public Class BaseClass
        Public Event BaseEvent(ByVal i As Integer)
        ' Place methods and properties here.
    End Class
    
    Public Class DerivedClass
        Inherits BaseClass
        Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent
            ' Place code to handle events from BaseClass here.
        End Sub
    End Class
    

Siehe auch

Konzepte

Ereignisse und Ereignishandler

Delegaten und der AddressOf-Operator

AddHandler und RemoveHandler

Referenz

Handles

AddHandler-Anweisung