Freigeben über


Abonnieren von Ereignissen und Behandeln von Ereignissen in Visual Basic

Ein Ereignis ist eine Aktion oder ein Vorkommen , z. B. ein Mausklick oder ein Guthabenlimit überschritten, das von einigen Programmkomponenten erkannt wird und für die Sie Code schreiben können, um zu reagieren. Ein Ereignishandler ist der Code, den Sie schreiben, um auf ein Ereignis zu reagieren.

In Visual Basic gibt es zwei Seiten zum Arbeiten mit Ereignissen:

  • Ereignisveröffentlichung – Klassen deklarieren Ereignisse und lösen sie aus, wenn etwas Interessantes mithilfe der RaiseEvent-Anweisung geschieht. Dadurch werden die Ereignishandler tatsächlich aufgerufen.
  • Ereignisabonnement – Sie abonnieren Ereignisse, indem Sie Prozeduren als Handler für bestimmte Ereignisse identifizieren. Sie können dies entweder mit einer Handles Klausel und einer WithEvents Variablen oder mit einer AddHandler-Anweisung tun.

Ein Ereignishandler in Visual Basic ist eine Sub Prozedur. Ihr Code ruft ihn nicht direkt wie andere Sub Prozeduren auf. Stattdessen rufen Ereigniserzeuger die Prozedur auf, wenn das Ereignis ausgelöst wird, weil die Prozedur auf das Ereignis registriert ist.

Die Verwendung einer Handles Klausel ist die Standardweise zum Abonnieren von Ereignissen in Visual Basic. So werden Ereignishandler von den Designern geschrieben, wenn Sie in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) programmieren. Die AddHandler Anweisung eignet sich für das dynamische Abonnieren von Ereignissen zur Laufzeit.

Wenn das Ereignis auftritt, ruft Visual Basic die Ereignishandlerprozedur automatisch auf. Jeder Code, der Zugriff auf das Ereignis hat, kann es durch Ausführen einer RaiseEvent-Anweisung auslösen.

Sie können mehrere Ereignishandler demselben Ereignis zuordnen. In einigen Fällen können Sie einen Handler von einem Ereignis trennen. Weitere Informationen finden Sie unter "Ereignisse".

Abonnieren eines Ereignisses mit Handles und WithEvents

  1. Stellen Sie sicher, dass das Ereignis mit einer Event-Anweisung deklariert wird.

  2. Deklarieren Sie eine Objektvariable auf Modul- oder Klassenebene mithilfe des Schlüsselworts WithEvents . Die As Klausel für diese Variable muss die Klasse angeben, die das Ereignis auslöst.

  3. Fügen Sie in der Deklaration der Ereignisbehandlungsprozedur Sub eine Handles Klausel hinzu, die die WithEvents Variable und den Ereignisnamen angibt.

  4. Wenn das Ereignis auftritt, ruft Visual Basic die Sub Prozedur automatisch auf. Ihr Code kann eine RaiseEvent Anweisung verwenden, um das Ereignis auszuheben und alle abonnierten Handler aufzurufen.

    Im folgenden Beispiel wird ein Ereignis und eine WithEvents Variable definiert, die auf die Klasse verweist, die das Ereignis auslöst. Die Ereignisbehandlungsprozedur Sub verwendet eine Handles Klausel, um die Klasse und das von ihr behandelte Ereignis anzugeben.

    ' Example showing event handling with Handles and WithEvents
    Public Class EventPublisher
        Public Event SomethingHappened()
        
        Public Sub CauseEvent()
            ' Raise the event when something interesting happens
            RaiseEvent SomethingHappened()
        End Sub
    End Class
    
    Public Class EventSubscriber
        ' Declare a WithEvents variable
        Dim WithEvents eventObj As New EventPublisher
        
        ' Handle the event using Handles clause
        Public Sub ProcessHappen() Handles eventObj.SomethingHappened
            ' Insert code to handle somethingHappened event.
            Console.WriteLine("Event handled using Handles clause!")
        End Sub
        
        Public Sub TriggerEvent()
            eventObj.CauseEvent()
        End Sub
    End Class
    

Abonnieren eines Ereignisses mithilfe von AddHandler

  1. Stellen Sie sicher, dass das Ereignis mit einer Event-Anweisung deklariert ist.

  2. Führen Sie eine AddHandler-Anweisung aus, um die Ereignisbehandlungsprozedur Sub dynamisch mit dem Ereignis zu verbinden.

  3. Wenn das Ereignis auftritt, ruft Visual Basic die Sub Prozedur automatisch auf. Ihr Code kann eine RaiseEvent Anweisung verwenden, um das Ereignis auszuheben und alle abonnierten Handler aufzurufen.

    Im folgenden Beispiel wird die AddHandler-Anweisung im Konstruktor verwendet, um die OnTimerElapsed Prozedur als Ereignishandler für ein benutzerdefiniertes Timerereignis zuzuordnen.

    ' Example showing event handling with AddHandler
    Public Class Timer
        Public Event TimerElapsed(ByVal message As String)
        
        Public Sub Start()
            ' Simulate timer elapsed
            RaiseEvent TimerElapsed("Timer has elapsed!")
        End Sub
    End Class
    
    Public Class Application
        Private appTimer As New Timer()
        
        Sub New()
            ' Use AddHandler to dynamically associate event handler
            AddHandler appTimer.TimerElapsed, AddressOf OnTimerElapsed
        End Sub
    
        Private Sub OnTimerElapsed(ByVal message As String)
            ' Insert code to handle timer elapsed event
            Console.WriteLine($"Handling timer event: {message}")
        End Sub
        
        Public Sub StartTimer()
            appTimer.Start()
        End Sub
    End Class
    

    Sie können einen Ereignishandler von einem Ereignis trennen, indem Sie die RemoveHandler-Anweisung ausführen.

Siehe auch