- •690 , Часть III. Применение языка с#
- •Глава 25. Создание Windows-приложений 691
- •692 Часть III. Применение языка с#
- •Глава 25. Создание Windows-приложений 693
- •694 Часть III. Применение языка с#
- •Глава 25. Создание Windows-приложений 695
- •696 Часть III. Применение языка с #
- •Глава 25. Создание Windows-приложений 697
- •698 Часть hi. Применение языка с#
- •Глава 25. Создание Windows-приложений 699
- •700 Часть III. Применение языка с#
- •Глава 25. Создание Windows-приложений 701
- •702 Часть III. Применение языка с#
- •Глава 25. Создание Windows-приложений 703
- •704 • Часть III. Применение языка с#
- •Глава 25. Создание Windows-приложений 705
696 Часть III. Применение языка с #
Text = "Использование кнопки";
MyButton = new Button();
MyButton.Text = "Щелкните";
MyButton.Location = new Point(100, 200)
Controls.Add(MyButton);
[STAThread]
public static void Main() {
ButtonForm skel = new ButtonForm();
Application.Run(skel);
В этой программе создается класс ButtonForm, который является производным от
класса Form. Он содержит поле типа Button с именем MyButton. В конструкторе
класса ButtonForm кнопка создается, инициализируется и помещается на форму. При
выполнении этой программы отображается окно, показанное на рис. 25.3. Вы можете
щелкнуть на кнопке, но ничего не произойдет. Чтобы заставить кнопку выполнять
какие-либо действия, необходимо добавить в программу обработчик сообщений, как
описано в следующем разделе.
Рис. 25.3. Кнопка на форме
Ш1 Обработка сообщений
Чтобы программа реагировала на щелчок на кнопке (или на какое-либо другое
действие пользователя), необходимо обеспечить обработку сообщения, которое гене-
рирует эта кнопка. В общем случае, когда пользователь воздействует на элемент
управления, его действие передается программе в виде сообщения. В Сопрограмме,
основанной на применении окон, такие сообщения обрабатываются обработчиками
событий. Следовательно, чтобы получить сообщение, программа должна добавить
собственный обработчик событий в список обработчиков, вызываемых при генериро-
вании сообщения. Для сообщений, связанных со щелчком на кнопке, это означает
добавление обработчика для события Click.
Событие Click определяется в классе Button. (Событие Click унаследовано от
класса Control.) Его общий формат таков:
public Event EventHandler Click;
Глава 25. Создание Windows-приложений 697
Делегат EventHandler определяется так:
public delegate void EventHandler(object who,
EventArgs args)
Объект, который сгенерировал событие, передается в параметре who, а информа-
ция, связанная с этим событием, — в параметре args. Для многих событий в качестве
параметра args будет служить объект класса, выведенного из класса EventArgs. По-
скольку щелчок на кнопке не требует дополнительной информации, при обработке
события щелчка на кнопке не нужно беспокоиться об аргументах этого события.
Следующая программа основана на предыдущей, но с добавлением кода реакции
на щелчок. При каждом щелчке на кнопке будет изменяться ее местоположение.
// Обработка сообщений от кнопки. '
using System;
using System.Windows.Forms;
using System.Drawing;
class ButtonForm : Form {
Button MyButton = new Button();
public ButtonForm() {
Text = "Реакция на щелчок";
MyButton = new Button();
MyButton.Text = "Щелкните";
MyButton.Location = new Point(100, 200);
// Добавляем в список обработчик событий кнопки.
MyButton.Click += new EventHandler(MyButtonClick);
Controls.Add(MyButton);
}
[STAThread] %
public static void Main() {
ButtonForm skel - new ButtonForm();
Application.Run(skel);
}
// Обработчик для кнопки MyButton.
protected void MyButtonClick(object who, EventArgs e) {
if (MyButton.Top === 200)
MyButton.Location = new Point (10, 10); '
else
MyButton.Location = new Point (100, 200);
Рассмотрим внимательно код обработчика события щелчка на кнопке:
// Обработчик для кнопки MyButton.
protected void MyButtonClick(object who, EventArgs e) {
if(MyButton.Top == 200)
MyButton.Location = new Point(10, 10);
else \
MyButton.Location = new Point(100, 200);
}
