Megosztás a következőn keresztül:


Eseményekre való feliratkozás és azok kezelése a Visual Basicben

Az esemény olyan művelet vagy esemény – például egérkattintás vagy kreditkorlát túllépése –, amelyet egy programösszetevő felismer, és amelyre a válaszhoz kódot írhat. Az eseménykezelő az eseményre válaszoló kód.

A Visual Basicben két oldal áll rendelkezésre az események használatához:

  • Események közzététele – Az osztályok eseményeket deklarálnak, és amikor valami érdekes történik, a RaiseEvent utasítást használják. Ez hívja meg az eseménykezelőket.
  • Esemény-előfizetés – Az eseményekre úgy iratkozhat fel, hogy azonosítja az adott események kezelőinek eljárásait. Ezt egy záradékkal és egy Handles változóvalWithEvents, vagy egy AddHandler utasítással teheti meg.

A Visual Basic eseménykezelője egy Sub eljárás. A kód nem hívja meg közvetlenül a hívást, mint más eljárások esetében. Az esemény közzétevői az eljárást az esemény bekövetkeztekor hívják meg, mivel az eljárás fel van iratkozva az eseményre.

Handles A záradék használata az alapértelmezett módja az eseményekre való feliratkozásnak a Visual Basicben. Az eseménykezelőket így írják meg a tervezők, amikor az integrált fejlesztési környezetben (IDE) programoznak. Az AddHandler utasítás alkalmas az eseményekre való dinamikus feliratkozásra futási időben.

Az esemény bekövetkezésekor a Visual Basic automatikusan meghívja az eseménykezelő eljárást. Az eseményhez hozzáféréssel rendelkező kódok egy RaiseEvent utasítás végrehajtásával okozhatják azt.

Több eseménykezelőt is társíthat ugyanahhoz az eseményhez. Bizonyos esetekben egy kezelőt leválaszthat egy eseményről. További információ: Események.

Feliratkozás egy eseményre a következővel Handles : WithEvents

  1. Győződjön meg arról, hogy az esemény eseménykimutatással van deklarálva.

  2. Deklarálhat egy objektumváltozót modul- vagy osztályszinten a WithEvents kulcsszó használatával. A As változó záradékának meg kell adnia az eseményt váltó osztályt.

  3. Az eseménykezelési Sub eljárás deklarációjában adjon hozzá egy Handles záradékot, amely megadja a változót WithEvents és az esemény nevét.

  4. Az esemény bekövetkezésekor a Visual Basic automatikusan meghívja az Sub eljárást. A kód egy utasítással RaiseEvent indíthatja el az eseményt, és meghívhatja az összes előfizetett kezelőt.

    Az alábbi példa egy eseményt és egy változót WithEvents határoz meg, amely az eseményt váltó osztályra hivatkozik. Az eseménykezelési Sub eljárás záradékkal Handles határozza meg az általa kezelt osztályt és eseményt.

    ' 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
    

Feliratkozás eseményre az AddHandler használatával

  1. Győződjön meg arról, hogy az esemény egy utasítással Event van deklarálva.

  2. Egy AddHandler-utasítás végrehajtásával dinamikusan csatlakoztathatja az eseménykezelési Sub eljárást az eseményhez.

  3. Az esemény bekövetkezésekor a Visual Basic automatikusan meghívja az Sub eljárást. A kód egy utasítással RaiseEvent indíthatja el az eseményt, és meghívhatja az összes előfizetett kezelőt.

    Az alábbi példa a konstruktor AddHandler utasításával társítja az OnTimerElapsed eljárást eseménykezelőként egy egyéni időzítőeseményhez.

    ' 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
    

    Az eseménykezelőt leválaszthatja egy eseményről a RemoveHandler utasítás végrehajtásával.

Lásd még