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

698 Часть hi. Применение языка с#

Обработчик MyButtonClick () использует такую же сигнатуру, как и приведенный

выше делегат EventHandler, а это значит, что обработчик можно добавить в цепочку

обработчиков для события Click. Обратите внимание на то, что в его определении

использован модификатор типа protected. И хотя это не является обязательным тре-

бованием, такая модификация имеет смысл, поскольку обработчики событий не

предназначены для вызова кодом, а используются лишь для ответа на события.

В коде обработчика координаты верхней границы кнопки определяются с помо-

щью свойства Тор. Следующие свойства определяются для всех элементов управления

(они задают координаты верхнего левого и нижнего правого углов):

public int Top { get; set; }

public int Bottom { get; }

public int Left { get; set; }

public int Right { get; }

Обратите __________внимание на то, что местоположение элемента управления можно изме-

нить с помощью свойств Тор и Left, но не свойств Bottom и Right, так как послед-

ние предназначены только для чтения. (Для изменения размера элемента управления

можно использовать свойства Width и Height.)

При получении события, связанного со щелчком на кнопке, проверяется коорди-

ната ее верхней границы, и, если она равна начальному значению 200, для кнопки ус-

танавливаются новые координаты: 10, 10. В противном случае кнопка возвращается в

исходное положение с координатами 100, 200. Поэтому при каждом щелчке на кноп-

ке ее местоположение меняется.

Прежде чем обработчик MyButtonClick () сможет получать сообщения, его необ-

ходимо добавить в цепочку обработчиков событий, связанную с событием Click. Это

реализуется в конструкторе класса But ton Form с помощью такой инструкции:

I MyButton.Click +≪ new EventHandler(MyButtonClick);

После выполнения этой инструкции при каждом щелчке на кнопке и будет вызы-

ваться обработчик событий MyButtonClick ().

Альтернативная реализация

Интересно отметить, что обработчик событий MyButtonClick () можно написать

по-другому. Вспомните, что параметр who обработчика событий принимает ссылку на

объект, который сгенерировал вызов. Когда происходит событие, связанное со щелч-

ком на кнопке, таким объектом является кнопка, на которой был сделан щелчок. По-

этому обработчик MyButtonClick () может иметь такой код:

// Альтернативный вариант обработчика событий,

// связанных со щелчком на кнопке.

protected void MyButtonClick(object who, EventArgs e) {

Button b - (Button) who;

if(b.Top == 200)

b.Location = new Point(10, 10);

else

b.Location = new Point(100, 200);

}

В этой версии обработчика значение парамефа who приводится к типу Button, и

именно эта ссылка (а не поле MyButton) используется для доступа к объекту кнопки.

И хотя в данном случае этот вариант не демонстрирует никаких преимуществ перед

предыдущим, нетрудно представить ситуации, в которых он окажется более подходя-

щим. Например, такой подход позволяет писать обработчик событий кнопки, кото-

рый не зависит от конкретной кнопки.

Глава 25. Создание Windows-приложений 699

Использование окна сообщений

Одним из самых полезных встроенных средств Windows-приложений является ок-

но сообщений. Как понятно по названию, окно сообщений позволяет отображать со-

общения. С его помощью можно также получить от пользователя такие простые отве-

ты (на поставленные вопросы), как Да, Нет или ОК. В программе, основанной на

применении окон, окно сообщений поддерживается классом MessageBox. При этом

объект класса создавать не нужно. Для отображения окна сообщений достаточно вы-

звать определенный в этом классе статический метод Show ().

Метод Show () используется в нескольких форматах. Один из них выглядит так:

public static DialogResult Show(

string msg,

string caption,

MebsageBoxButtons mbb)

Строка, отображаемая внутри окна, передается в параметре msg; заголовок окна

сообщения — в параметре caption. Кнопки, отображаемые в окне, задаются пара-

метром mbb. Метод возвращает ответ пользователя.

MessageBoxButtons — это перечисление, которое определяет следующие значения:

AbortRetrylgnore OK OKCancel

RetryCancel YesNo YesNoCancel

Каждое из этих значений описывает кнопки, которые будут включены в окно со-

общений. Например, если параметр mbb содержит значение YesNo, то в окне сообще-

ний будут отображены кнопки Да и Нет.

Значение, возвращаемое методом Show (), означает, какая кнопка нажата пользо-

вателем. Это может быть одно из следующих значений:

Abort Cancel Ignore No

None OK Retry Yes

В своей программе вы можете проверить значение, возвращаемое методом Show ( ) ,

и определить линию поведения, избранную пользователем. Например, если в окне

сообщения пользователь предупреждается о возможности перезаписи файла, то ваша

программа предотвратит перезапись, если пользователь щелкнет на кнопке Отменить,

или выполнит ее, если пользователь щелкнет на ОК.

Следующая программа основана на предыдущей, но с добавлением кнопки оста-

нова и окна сообщений. В обработчике событий, связанных с кнопкой останова, ор-

ганизовано отображение окна сообщений, в котором пользователю предлагается отве-

тить на вопрос, желает ли он остановить программу. Если пользователь ответит щелч-

ком на кнопке Да, программа остановится. Если же он щелкнет на кнопке Нет,

^выполнение программы будет продолжено.

// Добавление кнопки останова.

using System;

using System.Windows.Forms;

using System.Drawing;

class ButtonForm : Form {

Button MyButton;

Button StopButton;

public ButtonForm() {

Text = "Добавление кнопки Стоп";