Så här prenumererar du på händelser och hanterar dem i Visual Basic

En händelse är en åtgärd eller förekomst – till exempel en musklickning eller en kreditgräns som överskrids – som identifieras av någon programkomponent och som du kan skriva kod för att svara på. En händelsehanterare är den kod som du skriver för att svara på en händelse.

I Visual Basic finns det två sidor för att arbeta med händelser:

  • Händelsepublicering – Klasser deklarerar händelser och genererar dem när något intressant händer med hjälp av RaiseEvent-instruktionen. Det här är vad som faktiskt anropar händelsehanterarna.
  • Händelseprenumeration – Du prenumererar på händelser genom att identifiera procedurer som hanterare för specifika händelser. Du kan göra detta antingen med en Handles sats och en WithEvents variabel eller med en AddHandler-instruktion.

En händelsehanterare i Visual Basic är en Sub procedur. Din kod anropar den ej direkt, såsom andra Sub funktioner. I stället anropar händelseutgivare proceduren när händelsen utlöses eftersom proceduren är registrerad för händelsen.

Att använda en Handles sats är standardsättet för att prenumerera på händelser i Visual Basic. Det är så händelsehanterare skapas av designers när du programmerar i en integrerad utvecklingsmiljö (IDE). Instruktionen AddHandler är lämplig för att prenumerera på händelser dynamiskt vid körning.

När händelsen inträffar anropar Visual Basic automatiskt händelsehanterarproceduren. All kod som har åtkomst till händelsen kan orsaka att den inträffar genom att köra en RaiseEvent-instruktion.

Du kan associera mer än en händelsehanterare med samma händelse. I vissa fall kan du koppla bort en hanterare från en händelse. Mer information finns i Händelser.

Prenumerera på en händelse med Handles och WithEvents

  1. Kontrollera att händelsen har deklarerats med en händelsedeklaration.

  2. Deklarera en objektvariabel på modul- eller klassnivå med hjälp av nyckelordet WithEvents . As Satsen för den här variabeln måste ange den klass som genererar händelsen.

  3. I deklarationen av händelsehanteringsproceduren Sub lägger du till en Handles sats som anger variabeln WithEvents och händelsenamnet.

  4. När händelsen inträffar anropar Visual Basic automatiskt proceduren Sub . Koden kan använda en RaiseEvent instruktion för att skapa händelsen och anropa alla hanterare som prenumererar.

    I följande exempel definieras en händelse och en WithEvents variabel som refererar till klassen som genererar händelsen. Händelsehanteringsproceduren Sub använder en Handles sats för att ange vilken klass och händelse den hanterar.

    ' 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
    

Prenumerera på en händelse med Hjälp av AddHandler

  1. Kontrollera att händelsen har deklarerats med en Event-instruktion.

  2. Kör en AddHandler-instruktion för att dynamiskt ansluta händelsehanteringsproceduren Sub till händelsen.

  3. När händelsen inträffar anropar Visual Basic automatiskt proceduren Sub . Koden kan använda en RaiseEvent instruktion för att skapa händelsen och anropa alla hanterare som prenumererar.

    I följande exempel används AddHandler-instruktionen i konstruktorn för att associera proceduren OnTimerElapsed som händelsehanterare för en anpassad timerhändelse.

    ' 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
    

    Du kan koppla bort en händelsehanterare från en händelse genom att köra RemoveHandler-instruktionen.

Se även