Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
Handlesi zmiennejWithEventslub 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
Upewnij się, że zdarzenie zostało zadeklarowane za pomocą instrukcji event.
Zadeklaruj zmienną obiektu na poziomie modułu lub klasy przy użyciu słowa kluczowego
WithEvents. KlauzulaAsdla tej zmiennej musi określać klasę, która zgłasza zdarzenie.W deklaracji procedury obsługi
Subzdarzeń dodaj klauzulęHandlesokreślającą zmiennąWithEventsi nazwę zdarzenia.Po wystąpieniu zdarzenia program Visual Basic automatycznie wywołuje procedurę
Sub. Kod może użyć instrukcjiRaiseEvent, aby zgłosić zdarzenie i wywołać wszystkie zarejestrowane procedury obsługi.W poniższym przykładzie zdefiniowano zdarzenie i zmienną
WithEventsodwołującą się do klasy, która wywołuje zdarzenie. Procedura obsługi zdarzeńSubużywa klauzuli , aby określić klasęHandlesi 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
Upewnij się, że zdarzenie zostało zadeklarowane za pomocą oświadczenia
Event.Wykonaj instrukcję AddHandler , aby dynamicznie połączyć procedurę obsługi
Subzdarzeń ze zdarzeniem.Po wystąpieniu zdarzenia program Visual Basic automatycznie wywołuje procedurę
Sub. Kod może użyćRaiseEventinstrukcji , 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ć
OnTimerElapsedprocedurę 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 ClassMożna odłączyć program obsługi zdarzeń od zdarzenia, wykonując instrukcję RemoveHandler.