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


Практическое руководство. Написание обработчиков событий

Обновлен: Ноябрь 2007

Способ написания обработчика событий зависит от того, как его в дальнейшем он будет связываться с событиями. Стандартным способом создания обработчика событий является использование ключевого слова Handles с ключевым словом WithEvents. Visual Basic обеспечивает второй способ обработки событий: оператор AddHandler. Операторы AddHandler и RemoveHandler позволяют динамически запускать и прерывать обработку отдельных событий. Можно использовать любой из этих способов. Не допускается одновременное применение операторов WithEvents и AddHandler к одному событию.

Обработка событий при помощи WithEvents

Зарезервированное слово WithEvents позволяет создавать объектные переменные на уровне класса или модуля, которые могут быть использованы вместе с ключевым словом Handles в обработчиках событий.

Обработка событий при помощи WithEvents и ключевого слова Handles

  1. Создайте простой класс, содержащий событие.

    Class Class1
        Public Event AnEvent(ByVal EventNumber As Integer)
    End Class
    
  2. В классе или модуле, который будет обрабатывать событие, используйте ключевое слово WithEvents, чтобы объявить объектную переменную для источника событий, как демонстрируется в следующем примере:

    Public WithEvents ClassInst As Class1
    
  3. В редакторе кода выберите только что объявленную переменную WithEvents в раскрывающемся списке Имя класса слева.

  4. Выберите обрабатываемое событие в раскрывающемся списке Имя Метода справа. Редактор кода создаст пустую процедуру обработчика событий с ключевым словом Handles.

    k2kt7a7y.alert_note(ru-ru,VS.90).gifПримечание.

    Этот этап является необязательным. Можно создать процедуру обработчика события вручную, поскольку создаваемая процедура является подпрограммой, имеет набор аргументов, необходимый для обрабатываемого события, а также ключевое слово Handles, задающее обрабатываемое событие.

  5. Добавьте код обработки события в процедуру обработчика, используя предоставленные аргументы. В коде ниже приведен пример.

    Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _
          Handles ClassInst.AnEvent
        MsgBox("Received event number: " & CStr(EventNumber))
    End Sub
    

Обработка событий при помощи AddHandler

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

Обработка событий с помощью AddHandler

  1. Создайте подпрограмму для обработки события, как в следующем примере:

    Public Sub EHandler(ByVal EventNumber As Integer)
        MsgBox("Received event number " & CStr(EventNumber))
    End Sub
    
  2. Объявите объектную переменную, принадлежащую классу, являющемуся источником событий, которые необходимо обработать. В отличие от переменной WithEvents, это может быть локальная переменная в процедуре. Пример.

    Public Sub TestAddHandler()
        Dim CI As New Class1
    End Sub
    
  3. Используйте оператор AddHandler для указания имени отправителя событий, а оператор AddressOf — для передачи имени обработчика событий. Например, добавьте следующий код в конец подпрограммы TestAddHandler:

    AddHandler CI.AnEvent, AddressOf EHandler
    

    Любая процедура может служить обработчиком событий, если она содержит необходимые для обработки события аргументы.

Использование RemoveHandler для остановки обработки событий

Для динамического отключения событий от обработчика можно использовать оператор RemoveHandler.

Остановка обработки событий при помощи RemoveHandler

  • Используйте оператор RemoveHandler для указания имени отправителя событий, а оператор AddressOf — для передачи имени обработчика событий. Синтаксис оператора RemoveHandler всегда почти полностью соответствует синтаксису оператора AddHandler, который используется для запуска обработки события. Пример.

    RemoveHandler CI.AnEvent, AddressOf EHandler
    

Обработка событий, унаследованных из базового класса

Производные классы — это классы, которые наследуют характеристики из базового класса и могут обрабатывать события, инициированные их базовым классом, при помощи оператора HandlesMyBase.

Обработка событий базового класса

  • Объявите обработчик событий в производном классе путем добавления оператора Handles MyBase.имя_события в строку объявления процедуры обработчика события, где имя_события является именем события в обрабатываемом базовом классе. Пример.

    Public Class BaseClass
        Public Event BaseEvent(ByVal i As Integer)
        ' Place methods and properties here.
    End Class
    
    Public Class DerivedClass
        Inherits BaseClass
        Sub EventHandler(ByVal x As Integer) Handles MyBase.BaseEvent
            ' Place code to handle events from BaseClass here.
        End Sub
    End Class
    

См. также

Основные понятия

События и обработчики событий

Делегаты и оператор AddressOf

Операторы AddHandler и RemoveHandler

Ссылки

Handles

Оператор AddHandler