Подробное рассмотрение. Совместное использование обработчика событий
Обновлен: Ноябрь 2007
На этом занятии будет рассмотрено, как создать общий обработчик событий, который обрабатывает события для более чем одного элемента управления.
На предыдущем занятии Взаимодействие программы с пользователем. Создание обработчика событий было рассмотрено, как записать код действий в ответ на события MouseEnter и MouseLeave для элемента управления Button. Что произойдет при наличии двух или более элементов управления Button и необходимости отображать одно и то же сообщение для обоих из них? Можно написать код в обработчиках событий для каждого элемента управления, но есть и более простой способ.
Если внимательно посмотреть на методы обработчика событий для события MouseEnter, можно увидеть, что объявление Method (Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter) содержит предложение Handles (Handles Button1.MouseEnter). Это не случайно, так как ключевое слово Handles указывает обработчику событий, какие события он должен обрабатывать.
Чтобы сделать обработчик событий общим для нескольких элементов управления, просто необходимо добавить имена дополнительных элементов управления и имя события, которое необходимо обработать. Обработчику событий после этих действий будет сообщаться о возникновении события для любого из этих элементов управления. Например, если имеется два элемента управления Button, и необходимо использовать один и тот же обработчик событий для них, предложение Handles будет выглядеть следующим образом.
Handles Button1.MouseEnter, Button2.MouseEnter.
Теперь имеется один метод, обрабатывающий событие MouseEnter для обоих элементов управления. Как же обработчик событий распознает, какой элемент управления вызвал событие? Если снова взглянуть на объявление Method, то можно заметить предложение ByVal sender As Object — ключевое слово Sender указывает обработчику событий, какой объект (в данном случае элемент управления) вызвал событие.
Практическое задание
Для совместного использования обработчика событий
Откройте проект EventHandler, созданный в разделе, предшествующем данному. Если он не был сохранен, сначала необходимо вернуться к предыдущему разделу Взаимодействие программы с пользователем. Создание обработчика событий и завершить описанные там действия.
В Обозревателе решений выберите Form1.vb, а затем в меню Вид выберите Конструктор.
Из Панели элементов перетащите другой элемент управления Button на форму.
В окне Свойства задайте для свойства AutoSize значение True.
В меню Вид выберите Код, чтобы открыть редактор кода.
В объявлении метода Button1_MouseEnter (Private Sub Button1_MouseEnter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.MouseEnter) измените предложение Handles для чтения Handles Button1.MouseEnter, Button2.MouseEnter.
В теле объявления события замените код на следующий.
If sender.Equals(Button1) Then Button1.Text = "The mouse has entered Button1" Else Button2.Text = "The mouse has entered Button2" End If
Этот код проверяет, был ли отправителем элемент Button1; если да, то свойство Text элемента Button1 обновляется; если нет, обновляется свойство Text элемента Button2.
В объявлении метода Button1_MouseLeave измените предложение Handles для чтения следующим образом.
Handles Button1.MouseLeave, Button2.MouseLeave.
В теле объявления события замените код на следующий.
sender.Text = "The mouse has left"
В этом случае в коде свойство Text отправителя (Button1 или Button2) устанавливается в одну и ту же строку.
Нажмите клавишу F5 для запуска приложения.
Теперь, когда указатель мыши останавливается на кнопке, текст изменяется на строку The mouse has entered, заканчивающуюся именем кнопки, а если указатель мыши больше не находится на кнопке, текст меняется обратно на The mouse has left.
Попробуйте добавить другие элементы управления на форму и изменить предложения Handles для их добавления — они даже не обязательно должны иметь один и тот же тип!
Следующие действия
В этом уроке было рассмотрено, как обеспечить общий доступ к одному обработчику для нескольких элементов управления. На следующем занятии будет рассказано, как использовать два новых вида элементов управления: CheckBox и RadioButton, чтобы предоставлять пользователям возможность выбора.
Следующее занятие: Получение выбора пользователя. Использование флажков и переключателей
См. также
Задачи
Взаимодействие программы с пользователем. Создание обработчика событий