Поделиться через


Как подписаться на события и обрабатывать их в Visual Basic

Событие — это действие или происшествие, например, щелчок мыши или превышение кредитного лимита, которое распознается некоторыми компонентами программы, и для которых можно написать ответный код. Обработчик событий — это код, который вы пишете для реагирования на событие.

Существует две стороны при работе с событиями в Visual Basic.

  • Публикация событий — классы объявляют события и вызывают их, когда происходит что-то интересное с помощью инструкции RaiseEvent. Это то, что фактически вызывает (вызывает) обработчики событий.
  • Подписка на события— вы подписываетесь на события, определяя процедуры как обработчики для определенных событий. Это можно сделать с предложением Handles и переменной WithEvents или с помощью инструкции AddHandler.

Обработчик событий в Visual Basic — это Sub процедура. Код не вызывает его напрямую, как и другие Sub процедуры. Вместо этого издатели событий вызывают процедуру при возникновении события, так как процедура подписана на событие.

По умолчанию, клаузу Handles использовать - это стандартный способ подписки на события в Visual Basic. Это то, как обработчики событий записываются разработчиками при программировании в интегрированной среде разработки (IDE). Инструкция AddHandler подходит для подписки на события динамически во время выполнения.

При возникновении события Visual Basic автоматически вызывает процедуру обработчика событий. Любой код, имеющий доступ к событию, может привести к его возникновению путем выполнения инструкции RaiseEvent.

С одним и тем же событием можно связать несколько обработчиков событий. В некоторых случаях можно отвязать обработчик от события. Для получения дополнительной информации см. в событиях .

Подписка на событие с помощью Handles и WithEvents

  1. Убедитесь, что событие объявлено с помощью оператора Event.

  2. Объявите переменную объекта на уровне модуля или класса с помощью ключевого WithEvents слова. Предложение As для этой переменной должно указывать класс, который вызывает событие.

  3. В объявлении процедуры обработки Sub событий добавьте Handles предложение, указывающее WithEvents переменную и имя события.

  4. При возникновении события 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

  1. Убедитесь, что событие объявлено с помощью инструкции Event .

  2. Выполните инструкцию AddHandler , чтобы динамически подключить процедуру обработки Sub событий к событию.

  3. При возникновении события 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.

См. также