Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шилгд WinForms.docx
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
49.67 Кб
Скачать

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);

}