Udostępnij za pomocą


Jak subskrybować zdarzenia i obsługiwać je w Visual Basic

Zdarzenie jest akcją lub zdarzeniem — takim jak kliknięcie myszą lub przekroczenie limitu kredytowego — rozpoznawane przez jakiś składnik programu, na które można napisać kod, aby zareagować. Procedura obsługi zdarzeń to kod, który piszesz w celu reagowania na zdarzenie.

W języku Visual Basic istnieją dwa aspekty pracy ze zdarzeniami:

  • Publikowanie zdarzeń — klasy deklarują zdarzenia i zgłaszają je, gdy coś interesującego się dzieje przy użyciu instrukcji RaiseEvent. To właśnie wywołuje procedury obsługi zdarzeń.
  • Subskrypcja zdarzeń — subskrybujesz zdarzenia, identyfikując procedury obsługi dla określonych zdarzeń. Można to zrobić za pomocą klauzuli Handles i zmiennej WithEvents lub instrukcji AddHandler.

Procedura obsługi zdarzeń w Visual Basic jest procedurą Sub . Kod nie wywołuje go bezpośrednio tak jak inne Sub procedury. Zamiast tego wydawcy zdarzeń wywołują procedurę, gdy zdarzenie jest zgłaszane, ponieważ procedura jest subskrybowana do zdarzenia.

Używanie klauzuli Handles to domyślny sposób subskrybowania zdarzeń w Visual Basic. W ten sposób programy obsługi zdarzeń są zapisywane przez projektantów podczas programowania w zintegrowanym środowisku projektowym (IDE). Instrukcja AddHandler jest odpowiednia do subskrybowania zdarzeń dynamicznie w czasie wykonywania.

Po wystąpieniu zdarzenia program Visual Basic automatycznie wywołuje procedurę obsługi zdarzeń. Każdy kod, który ma dostęp do zdarzenia, może spowodować jego wystąpienie, wykonując instrukcję RaiseEvent.

Można skojarzyć więcej niż jedną procedurę obsługi zdarzeń z tym samym zdarzeniem. W niektórych przypadkach można oddzielić procedurę obsługującą od zdarzenia. Aby uzyskać więcej informacji, zobacz Events.

Subskrybowanie zdarzenia przy użyciu polecenia Handles i WithEvents

  1. Upewnij się, że zdarzenie zostało zadeklarowane za pomocą instrukcji event.

  2. Zadeklaruj zmienną obiektu na poziomie modułu lub klasy przy użyciu słowa kluczowego WithEvents . Klauzula As dla tej zmiennej musi określać klasę, która zgłasza zdarzenie.

  3. W deklaracji procedury obsługi Sub zdarzeń dodaj klauzulę Handles określającą zmienną WithEvents i nazwę zdarzenia.

  4. Po wystąpieniu zdarzenia program Visual Basic automatycznie wywołuje procedurę Sub . Kod może użyć instrukcji RaiseEvent, aby zgłosić zdarzenie i wywołać wszystkie zarejestrowane procedury obsługi.

    W poniższym przykładzie zdefiniowano zdarzenie i zmienną WithEvents odwołującą się do klasy, która wywołuje zdarzenie. Procedura obsługi zdarzeń Sub używa klauzuli , aby określić klasę Handles i zdarzenie, które obsługuje.

    ' 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
    

Subskrybowanie zdarzenia przy użyciu programu AddHandler

  1. Upewnij się, że zdarzenie zostało zadeklarowane za pomocą oświadczenia Event.

  2. Wykonaj instrukcję AddHandler , aby dynamicznie połączyć procedurę obsługi Sub zdarzeń ze zdarzeniem.

  3. Po wystąpieniu zdarzenia program Visual Basic automatycznie wywołuje procedurę Sub . Kod może użyć RaiseEvent instrukcji , aby zgłosić zdarzenie i wywołać wszystkie subskrybowane programy obsługi.

    W poniższym przykładzie użyto instrukcji AddHandler w konstruktorze, aby skojarzyć OnTimerElapsed procedurę jako procedurę obsługi zdarzeń dla niestandardowego zdarzenia czasomierza.

    ' 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
    

    Można odłączyć program obsługi zdarzeń od zdarzenia, wykonując instrukcję RemoveHandler.

Zobacz także