Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Событие — это действие или происшествие, например, щелчок мыши или превышение кредитного лимита, которое распознается некоторыми компонентами программы, и для которых можно написать ответный код. Обработчик событий — это код, который вы пишете для реагирования на событие.
Существует две стороны при работе с событиями в Visual Basic.
- Публикация событий — классы объявляют события и вызывают их, когда происходит что-то интересное с помощью инструкции RaiseEvent. Это то, что фактически вызывает (вызывает) обработчики событий.
-
Подписка на события— вы подписываетесь на события, определяя процедуры как обработчики для определенных событий. Это можно сделать с предложением
Handlesи переменнойWithEventsили с помощью инструкции AddHandler.
Обработчик событий в Visual Basic — это Sub процедура. Код не вызывает его напрямую, как и другие Sub процедуры. Вместо этого издатели событий вызывают процедуру при возникновении события, так как процедура подписана на событие.
По умолчанию, клаузу Handles использовать - это стандартный способ подписки на события в Visual Basic. Это то, как обработчики событий записываются разработчиками при программировании в интегрированной среде разработки (IDE). Инструкция AddHandler подходит для подписки на события динамически во время выполнения.
При возникновении события Visual Basic автоматически вызывает процедуру обработчика событий. Любой код, имеющий доступ к событию, может привести к его возникновению путем выполнения инструкции RaiseEvent.
С одним и тем же событием можно связать несколько обработчиков событий. В некоторых случаях можно отвязать обработчик от события. Для получения дополнительной информации см. в событиях .
Подписка на событие с помощью Handles и WithEvents
Убедитесь, что событие объявлено с помощью оператора Event.
Объявите переменную объекта на уровне модуля или класса с помощью ключевого
WithEventsслова. ПредложениеAsдля этой переменной должно указывать класс, который вызывает событие.В объявлении процедуры обработки
Subсобытий добавьтеHandlesпредложение, указывающееWithEventsпеременную и имя события.При возникновении события Visual Basic автоматически вызывает процедуру
Sub. Код может использовать инструкциюRaiseEventдля вызова события и вызова всех подписанных обработчиков.В следующем примере определяется событие и
WithEventsпеременная, ссылающаяся на класс, который вызывает событие. Процедура обработкиSubсобытий используетHandlesпредложение, чтобы указать класс и событие, которые она обрабатывает.' 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
Подписка на событие с помощью AddHandler
Убедитесь, что событие объявлено с помощью инструкции
Event.Выполните инструкцию AddHandler , чтобы динамически подключить процедуру обработки
Subсобытий к событию.При возникновении события Visual Basic автоматически вызывает процедуру
Sub. Код может использовать инструкциюRaiseEventдля вызова события и вызова всех подписанных обработчиков.В следующем примере оператор AddHandler в конструкторе используется для связывания
OnTimerElapsedпроцедуры в качестве обработчика событий для пользовательского события таймера.' 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Вы можете отключить обработчик событий от события, выполнив инструкцию RemoveHandler.