Практическое руководство. Написание обработчиков событий
Обновлен: Ноябрь 2007
Способ написания обработчика событий зависит от того, как его в дальнейшем он будет связываться с событиями. Стандартным способом создания обработчика событий является использование ключевого слова Handles с ключевым словом WithEvents. Visual Basic обеспечивает второй способ обработки событий: оператор AddHandler. Операторы AddHandler и RemoveHandler позволяют динамически запускать и прерывать обработку отдельных событий. Можно использовать любой из этих способов. Не допускается одновременное применение операторов WithEvents и AddHandler к одному событию.
Обработка событий при помощи WithEvents
Зарезервированное слово WithEvents позволяет создавать объектные переменные на уровне класса или модуля, которые могут быть использованы вместе с ключевым словом Handles в обработчиках событий.
Обработка событий при помощи WithEvents и ключевого слова Handles
Создайте простой класс, содержащий событие.
Class Class1 Public Event AnEvent(ByVal EventNumber As Integer) End Class
В классе или модуле, который будет обрабатывать событие, используйте ключевое слово WithEvents, чтобы объявить объектную переменную для источника событий, как демонстрируется в следующем примере:
Public WithEvents ClassInst As Class1
В редакторе кода выберите только что объявленную переменную WithEvents в раскрывающемся списке Имя класса слева.
Выберите обрабатываемое событие в раскрывающемся списке Имя Метода справа. Редактор кода создаст пустую процедуру обработчика событий с ключевым словом Handles.
Примечание. Этот этап является необязательным. Можно создать процедуру обработчика события вручную, поскольку создаваемая процедура является подпрограммой, имеет набор аргументов, необходимый для обрабатываемого события, а также ключевое слово Handles, задающее обрабатываемое событие.
Добавьте код обработки события в процедуру обработчика, используя предоставленные аргументы. В коде ниже приведен пример.
Public Sub ClassInst_AnEvent(ByVal EventNumber As Integer) _ Handles ClassInst.AnEvent MsgBox("Received event number: " & CStr(EventNumber)) End Sub
Обработка событий при помощи AddHandler
Для динамического связывания событий и процедур обработчика событий можно использовать оператор AddHandler.
Обработка событий с помощью AddHandler
Создайте подпрограмму для обработки события, как в следующем примере:
Public Sub EHandler(ByVal EventNumber As Integer) MsgBox("Received event number " & CStr(EventNumber)) End Sub
Объявите объектную переменную, принадлежащую классу, являющемуся источником событий, которые необходимо обработать. В отличие от переменной WithEvents, это может быть локальная переменная в процедуре. Пример.
Public Sub TestAddHandler() Dim CI As New Class1 End Sub
Используйте оператор 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
См. также
Основные понятия
Операторы AddHandler и RemoveHandler