Событие нажатия кнопки. Указание действия в случае события
Теперь мы должны задать метод, выполняющий действие при нажатии на кнопку. Такие методы называются обработчиками событий, поскольку они именно "обрабатывают" событие. В приведенном ниже примере код обработчика события просто изменяет надпись на кнопке, поэтому он совсем короткий:
using System;
using System.Windows.Forms;
class MyButtonClass: Form
{
private Button mrButton;
// Метод-конструктор
public MyButtonClass()
{
mrButton = new Button();
mrButton.Text = "Нажми меня!";
this.Controls.Add(mrButton);
}
// Основной метод
static void Main()
{
Application.Run(new MyButtonClass());
}
// Метод-обработчик событий
void MyButtonClickEventHandler(object sender, EventArgs e)
{
mrButton.Text = "Вы нажали меня!";
}
}
Ваша программа еще выполняется?
- Остановите ее (нажмите на кнопку X в верхнем правом углу окна, в котором открыта форма).
- Добавьте в программу выделенный код и нажмите на клавишу F5 для выполнения измененной программы.
- Попробуйте теперь щелкнуть по кнопке "Нажми меня". И теперь ничего не происходит?!
Поскольку вы уже прочитали те страницы, где мы говорили про методы, то должны узнать основную структуру приведенного выше метода. Слово void означает, что по его завершении ничего не возвращается. Мы назвали этот метод MyButtonClickEventHandler.
Возможно, то, что вы видите, кажется немного странным. Вы понимаете, что в скобках присутствуют два параметра, но почему у них такие необычные типы (object sender, EventArgs e)? К сожалению, с методами обработчиков событий нельзя использовать собственные типы параметров. Когда у кнопки возникает событие "Click", она посылает сообщение о нем операционной системе, а та находит и вызывает соответствующий обработчик события. При вызове такого метода система сама определяет типы параметров и передает обработчику их значения. Это факт, с которым мы ничего поделать не можем.
Поэтому придется просто смириться и всегда использовать ожидаемые типы параметров с обработчиком событий. Очень часто подставляемые параметры имеют тип object и EventArgs. В приведенном выше примере мы выбрали имена параметров sender и e, но могли бы выбрать любые другие — для компьютера важны имена типов этих параметров. Например, следующий код будет работать точно так же, как и код, рассмотренный в предыдущем примере. Можете проверить это сами, изменив имена параметров в вашей программе на x и y.
Примечание редактора. Ничего удивительного: эти параметры вообще не используются в тексте обработчика события. Но в ряде случаев они полезны. Например, при работе с мышкой обработчику события могут быть переданы координаты объекта, на котором нажата кнопка мыши.
void MyButtonClickEventHandler(object x, EventArgs y)
{
mrButton.Text = "Вы нажали меня!";
}
В первом параметре обычно содержится некоторая информация об объекте, который инициировал событие. Второй параметр относится к данным о самом событии.
Очень важно знать следующее: система всегда подставляет некоторые значения в эти два параметра, но зачастую необходимости в их использовании нет — они отправляются в метод обработчика событий "на всякий случай".