Delen via


Abonneren op gebeurtenissen en deze afhandelen in Visual Basic

Een gebeurtenis is een actie of gebeurtenis, zoals een muisklik of een tegoedlimiet overschreden, die wordt herkend door een programmaonderdeel en waarvoor u code kunt schrijven om te reageren. Een gebeurtenis-handler is de code die u schrijft om te reageren op een gebeurtenis.

In Visual Basic zijn er twee kanten aan het werken met gebeurtenissen:

  • Gebeurtenispublicatie : klassen declareren gebeurtenissen en genereren deze wanneer er iets interessants gebeurt met behulp van de RaiseEvent-instructie. Dit is wat de event handlers daadwerkelijk aanroept.
  • Gebeurtenisabonnement : u abonneert u op gebeurtenissen door procedures te identificeren als handlers voor specifieke gebeurtenissen. U kunt dit doen met een Handles component en een WithEvents variabele, of met een AddHandler-instructie.

Een gebeurtenis-handler in Visual Basic is een Sub procedure. Uw code roept deze niet rechtstreeks aan zoals andere Sub procedures. In plaats daarvan roepen gebeurtenisuitgevers de procedure aan wanneer de gebeurtenis wordt gegenereerd omdat de procedure is geabonneerd op de gebeurtenis.

Het gebruik van een Handles component is de standaard manier om u te abonneren op gebeurtenissen in Visual Basic. Zo worden evenementhandlers door de ontwerpers geschreven wanneer u in de geïntegreerde ontwikkelomgeving (IDE) programmeert. De AddHandler instructie is geschikt voor het dynamisch abonneren op gebeurtenissen tijdens runtime.

Wanneer de gebeurtenis plaatsvindt, roept Visual Basic automatisch de procedure voor de gebeurtenis-handler aan. Elke code die toegang heeft tot de gebeurtenis kan ertoe leiden dat deze zich voordoet door een RaiseEvent-instructie uit te voeren.

U kunt meer dan één gebeurtenishandler koppelen aan dezelfde gebeurtenis. In sommige gevallen kunt u een handler loskoppelen van een gebeurtenis. Zie Gebeurtenissenvoor meer informatie.

Abonneren op een gebeurtenis met behulp van Handles en WithEvents

  1. Zorg ervoor dat de gebeurtenis is gedeclareerd met een gebeurtenisinstructie.

  2. Declareer een objectvariabele op module- of klasseniveau met behulp van het WithEvents trefwoord. De As component voor deze variabele moet de klasse opgeven die de gebeurtenis genereert.

  3. Voeg in de declaratie van de procedure voor gebeurtenisafhandeling Sub een Handles component toe waarmee de WithEvents variabele en de gebeurtenisnaam worden opgegeven.

  4. Wanneer de gebeurtenis plaatsvindt, roept Visual Basic de Sub procedure automatisch aan. Uw code kan een RaiseEvent instructie gebruiken om de gebeurtenis te genereren en alle geabonneerde handlers aan te roepen.

    In het volgende voorbeeld worden een gebeurtenis en een WithEvents variabele gedefinieerd die verwijst naar de klasse die de gebeurtenis genereert. De procedure voor gebeurtenisafhandeling Sub maakt gebruik van een Handles component om de klasse en gebeurtenis op te geven die worden verwerkt.

    ' 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
    

Abonneren op een gebeurtenis met AddHandler

  1. Zorg ervoor dat het event is gedefinieerd met een Event instructie.

  2. Voer een AddHandler-instructie uit om de procedure voor gebeurtenisafhandeling Sub dynamisch te verbinden met de gebeurtenis.

  3. Wanneer de gebeurtenis plaatsvindt, roept Visual Basic de Sub procedure automatisch aan. Uw code kan een RaiseEvent instructie gebruiken om de gebeurtenis te genereren en alle geabonneerde handlers aan te roepen.

    In het volgende voorbeeld wordt de Instructie AddHandler in de constructor gebruikt om de OnTimerElapsed procedure te koppelen als een gebeurtenis-handler voor een aangepaste timer-gebeurtenis.

    ' 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
    

    U kunt een gebeurtenishandler loskoppelen van een gebeurtenis door de RemoveHandler-instructie uit te voeren.

Zie ook