Иллюстрированный самоучитель по Architecture .NET

Закрытие формы (Выход из формы)

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

  • щелкнуть на кнопке "X" (Закрыть) в правом верхнем углу окна;
  • закрыть окно из системного меню в левом верхнем углу окна,
  • закрыть окно с помощью комбинации клавиш ALT + F4,
  • выйти из приложения с помощью меню File › Exit (Файл › Выход)

Когда закрывается форма, вызывается событие Closing (Процедура завершения). Можно остановить процедуру завершения, установив в обработчике этого события свойство Cancel (Отмена). (Сначала нужно, как обычно, добавить обработчик события Closing (Процедура завершения)). Просто напечатайте код MessageBox (Окно сообщения), приведенный ниже:

protected void Forml_Closing (object sender.
System.ComponentModel.CancelEventArgs e)
{
DialogResult status = MessageBox.Show(// состояние
"Do you want to close",
// "Хотите закрыть?",
"Simple Form (VS)", MessageBoxButtons.YesNo);
if (status == DialogResult.No)
// если (состояние == DialogResult. Нет)
{
e.Cancel = true; // Отмена = истина
}
}

Для того чтобы получить нужное нам поведение приложения, обработчик меню File › Exit (Файл › Выход) должен не выходить из приложения, а закрыть главное окно, вызвав метод Сlose (Закрыть).

protected void menuExit_Click (object sender,
System.EventArgs e)
{
//Application.Exit();
// Приложение.Выход ();
Close ();
}

Теперь проект соответствует проекту, находящемуся в папке VSForm\Step4. Запустите программу, и попытайтесь закрыть окно приложения разными способами. В любом случае должно появиться диалоговое окно, показанное на рис. 6.20.

Иллюстрированный самоучитель по Architecture .NET › Создание графических пользовательских интерфейсов › Закрытие формы (Выход из формы)
Рис. 6.20. Диалоговое окно, которое спрашивает пользователя, действительно ли он хочет закрыть приложение

И, наконец, как обычно, перенесите код проекта, подготовленного на С#, в проект на C++ VSFormPort\Step4. Скомпонуйте и выполните программу на C++. Убедитесь в том, что она работает так же, как и программа на С#.

// VSForm – Step4
_gc class Forml: public System::Windows::Forms::Form
{
private: // частный
void InitializeComponent()
{
Closing += // Закрытие
new CancelEventHandler(this, Forml_Closing);
}
void menuExit_Click(
Object *sender, System::EventArgs *pe)
{
//Application::Exit();
// Приложение:: Выход ()
; Close();
}
void Form1_Closing(
Object *sender, CancelEventArgs *e)
{
int status = MessageBox::Show(// состояние
"Do you want to close",
// "Хотите закрыть",
"Simple Form (VS)", // Простая Форма
MessageBoxButtons::YesNo);
if (status == DialogResult::No)
// если (состояние == DialogResult::No)
{
e › Cancel = true; // Отмена = истина
}
}
};

Все оставшиеся примеры в этой главе написаны исключительно на С#!

Далее в этой главе мы будем рассматривать только программы на С#, поскольку даже в программах, которые в основном написаны на C++, при разработке графических пользовательских интерфейсов, как правило, используется С#. Причина этого проста – в C++ не поддерживается конструктор форм (Forms Designer).

Всегда помните о том, что вы можете сначала создать графический пользовательский интерфейс на С#, а потом, если понадобится, перенести этот код в C++. В предыдущих примерах мы показали, как это сделать.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.