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

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

Хотя можно представить проект Visual Studio как набор процедур, выполняемых в определенной последовательности, на самом деле, большинство программ управляются событиями, то есть поток выполнения определяется внешними воздействиями, называемыми событиями.

Под событием в данном случае подразумевается сигнал, сообщающий приложению, что произошло нечто важное. Например, когда пользователь щелкает элемент управления на форме, форма может инициировать событие Click и вызывать процедуру, обрабатывающую событие. События также допускают взаимодействие отдельных задач. Например, пользовательское приложение выполняет задачу по сортировке отдельно от основного приложения. Если пользователь отменяет сортировку, то приложение может послать событие отмены, которое остановит процесс сортировки.

Термины и основные понятия для событий

В этом разделе описываются термины и понятия, связанные с использованием событий в Visual Basic.

Объявление событий

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

Event AnEvent(ByVal EventNumber As Integer)

Создание событий

Событие похоже на сообщение о том, что случилось что-то важное. Рассылка сообщения называется созданием события. В Visual Basic события вызываются с помощью инструкции RaiseEvent, как в следующем примере:

RaiseEvent AnEvent(EventNumber)

События должны вызываться в рамках класса, модуля или структуры, где они объявлены. Например, производный класс не может вызывать события, унаследованные из базового класса.

Отправители событий

Любой объект, способный вызывать события, является отправителем событий, также называемым источником событий. Формы, элементы управления и пользовательские объекты являются примерами отправителей событий.

Обработчики событий

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

В Visual Basic используется стандартное положение об именовании обработчиков событий. Имя должно состоять из имени отправителя события, знака подчеркивания и имени события. Например, событие Click кнопки с именем button1 будет иметь имя Sub button1_Click.

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

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

Связывание событий с их обработчиками

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

Инструкция WithEvents и условие Handles предоставляют декларативный способ задания обработчиков событий. События, инициированные объектом, объявленным посредством WithEvents, могут быть обработаны любой подпрограммой с условием Handles, называющим это событие. Хотя условие Handles является стандартным способом связывания события с обработчиком, связь посредством него может осуществляться только во время компиляции.

Инструкции AddHandler и RemoveHandler более гибкие, чем условие Handles. Они позволяют динамически связывать и разъединять события с одним или несколькими обработчиками во время выполнения, кроме того, если используются эти операторы, не возникает необходимости объявлять переменные объекта при помощи WithEvents. Однако существуют некоторые ограничения в использовании WithEvents. Дополнительные сведения см. в разделе Оператор WithEvents и предложение Clause.

В некоторых случаях, например, когда события связаны с формами или элементами управления, Visual Basic автоматически задействует пустой обработчик событий и сопоставляет его с событием. Например, при двойном щелчке мышью командной кнопки на форме в режиме разработки Visual Basic создает пустой обработчик событий и переменную WithEvents для командной кнопки, как в следующем коде:

Friend WithEvents Button1 As System.Windows.Forms.Button
Protected Sub Button1_Click(ByVal sender As System.Object, _
   ByVal e As System.EventArgs) Handles Button1.Click
End Sub

См. также

Задачи

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

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

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

Оператор WithEvents и предложение Clause

Ссылки

Handles

Оператор AddHandler