Sdílet prostřednictvím


Jak se přihlásit k odběru událostí a zpracovat je v jazyce Visual Basic

Událost je akce nebo výskyt , například kliknutí myší nebo překročení limitu kreditu – rozpoznaný nějakou komponentou programu a pro který můžete napsat kód, který má reagovat. Obslužná rutina události je kód, který napíšete pro reakci na událost.

V jazyce Visual Basic existují dvě strany pro práci s událostmi:

  • Publikování událostí – Třídy deklarují události a vyvolávají je, když se pomocí příkazu RaiseEvent něco zajímavého stane. To je to, co skutečně vyvolává (volá) obslužné rutiny událostí.
  • Odběr událostí – Události se přihlásíte k odběru tím, že identifikujete procedury jako obslužné rutiny pro konkrétní události. Můžete to provést buď pomocí Handles klauzule a WithEvents proměnné, nebo pomocí příkazu AddHandler.

Obslužná rutina události v jazyce Visual Basic je procedura Sub . Kód ho nevolá přímo jako jiné Sub procedury. Místo toho vydavatelé událostí vyvolají proceduru, když je událost vyvolána, protože procedura je přihlášena k odběru události.

Handles Použití klauzule je výchozím způsobem přihlášení k odběru událostí v jazyce Visual Basic. To je způsob, jakým návrháři zapisují obslužné rutiny událostí, když programujete v integrovaném vývojovém prostředí (IDE). Příkaz AddHandler je vhodný pro dynamické přihlášení k odběru událostí za běhu.

Když dojde k události, Visual Basic automaticky volá proceduru pro obsluhu události. Jakýkoli kód, který má přístup k události, může způsobit jeho výskyt spuštěním příkazu RaiseEvent.

Ke stejné události můžete přiřadit více obslužných rutin události. V některých případech můžete zrušit přidružení obslužné rutiny k události. Další informace naleznete v části Události .

Přihlášení k odběru události pomocí Handles a WithEvents

  1. Ujistěte se, že je událost deklarována příkazem Event Statement.

  2. Deklarujte proměnnou objektu na úrovni modulu nebo třídy pomocí klíčového WithEvents slova. Klauzule As pro tuto proměnnou musí určovat třídu, která vyvolá událost.

  3. Do deklarace procedury zpracování Sub událostí přidejte Handles klauzuli, která určuje WithEvents proměnnou a název události.

  4. Když dojde k události, Visual Basic automaticky volá proceduru Sub . Váš kód může použít RaiseEvent příkaz k vyvolání události a vyvolání všech odebíraných obslužných rutin.

    Následující příklad definuje událost a proměnnou WithEvents , která odkazuje na třídu, která vyvolá událost. Procedura zpracování Sub událostí používá Handles klauzuli k určení třídy a události, které zpracovává.

    ' 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
    

Přihlášení k odběru události pomocí AddHandler

  1. Ujistěte se, že je událost deklarována příkazem Event .

  2. Spuštěním příkazu AddHandler dynamicky propojíte proceduru zpracování Sub událostí s událostí.

  3. Když dojde k události, Visual Basic automaticky volá proceduru Sub . Váš kód může použít RaiseEvent příkaz k vyvolání události a vyvolání všech odebíraných obslužných rutin.

    Následující příklad používá AddHandler příkaz v konstruktoru přidružit proceduru OnTimerElapsed jako obslužnou rutinu události pro vlastní událost časovače.

    ' 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
    

    Obslužnou rutinu události můžete zrušit spuštěním příkazu RemoveHandler.

Viz také