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

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

Вспомните, что параметр who обработчика событий принимает ссылку на объект, который сгенерировал вызов. Когда происходит событие, связанное со щелчком на кнопке, таким объектом является кнопка, на которой был сделан щелчок. Поэтому обработчик MyButtonClick () может иметь такой код:

 

// listing 4

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

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) используется для доступа к объекту кнопки.

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

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

 

Одним из самых полезных встроенных средств Windows-приложений является окно сообщений. Оно позволяет отображать сообщения. С его помощью можно также получить от пользователя такие простые ответы (на поставленные вопросы), как Да, Нет или ОК.

В программе, основанной на применении окон, окно сообщений поддерживается классом MessageBox. При этом объект класса создавать не нужно. Для отображения окна сообщений достаточно вызвать определенный в этом классе статический метод Show ().

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

 

Public static DialogResult Show(

string msg,

string caption,

MessageBoxButtons mbb )

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

Заголовок окна сообщения — в параметре caption.

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

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

Значение, возвращаемое методом Show (), означает, какая кнопка нажата пользователем. Это может быть одно из следующих значений:

 

Abort Cancel Ignore No

None OK Retry Yes

 

Например: if (result == DialogResult.Yes)

Application.Exit();

 

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

AbortRetrylgnore OK OKCancel

RetryCancel YesNo YesNoCancel

 

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

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

 

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

Например, если в окне сообщения пользователь предупреждается о возможности перезаписи файла, то ваша программа предотвратит перезапись, если пользователь щелкнет на кнопке Отменить, или выполнит ее, если пользователь щелкнет на ОК.

Далее программа основана на предыдущей, но с добавлением кнопки останова и окна сообщений.

В обработчике событий, связанных с кнопкой останова, организовано отображение окна сообщений, в котором пользователю предлагается ответить на вопрос, желает ли он остановить программу. Если пользователь ответит щелчком на кнопке Да, программа остановится. Если же он щелкнет на кнопке Нет, выполнение программы будет продолжено.

 

// listing 5

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

Using System;

Using System.Windows.Forms;

Using System.Drawing;

class ButtonForm : Form

{

Button MyButton;

Button StopButton;

Public ButtonForm()

{

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

// Создаем кнопки.

MyButton = new Button();

MyButton.Text = "Щелкните здесь";

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

MyButton.Width = 100;

StopButton = new Button();

StopButton.Text = "Стоп";

StopButton.Location = new Point(100, 100);

// Добавляем обработчики событий.

MyButton.Click += new EventHandler(MyButtonClick);

Controls.Add(MyButton);

StopButton.Click += new EventHandler(StopButtonClick);

Controls.Add(StopButton);

}

[STAThread]

Public static void Main()

{

ButtonForm skel = new ButtonForm();

Application.Run(skel);

}

// Обработчик событий для кнопки MyButton.