Ответов (11)11
Это делает свою работу:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = true;
}
Изменить: в ответ на беспокойство pix0rs - да, вы правы, что не сможете программно закрыть приложение. Однако вы можете просто удалить обработчик событий для события form_closing перед закрытием формы:
this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();
Это делает свою работу:
bool myButtonWasClicked = false;
private void Exit_Click(object sender, EventArgs e)
{
myButtonWasClicked = true;
Application.Exit();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (myButtonWasClicked)
{
e.Cancel = false;
}
else
{
e.Cancel = true;
}
}
Я использую форму как всплывающее диалоговое окно для отображения индикатора выполнения, и я не хочу, чтобы пользователь мог его закрыть.
Если пользователь настроен закрыть ваше приложение (и достаточно осведомлен), чтобы нажать alt + f4, он, скорее всего, также будет достаточно осведомлен, чтобы запустить диспетчер задач и вместо этого убить ваше приложение.
По крайней мере, с помощью alt + f4 ваше приложение может плавно завершить работу, а не просто заставить людей убить его. По опыту, люди, убивающие ваше приложение, означают поврежденные файлы конфигурации, сломанные базы данных, незавершенные задачи, которые вы не можете возобновить, и многие другие болезненные вещи.
По крайней мере, напомните им: «Вы уверены?», А не решительно препятствуйте этому.
Обратите внимание, что для приложения считается дурным тоном полностью предотвращать закрытие. Вы должны проверить аргументы события для события Closing, чтобы определить, как и почему ваше приложение было предложено закрыть. Если это произошло из-за выключения Windows, не следует предотвращать закрытие.
Если вы посмотрите на значение из FormClosingEventArgs e.CloseReason
, он расскажет вам , почему форма закрывается. Затем вы можете решить, что делать, возможные значения:
Имя участника - Описание
Нет - причина закрытия не была определена или не может быть определена.
WindowsShutDown - операционная система закрывает все приложения перед завершением работы.
MdiFormClosing - родительская форма этой формы многодокументного интерфейса (MDI) закрывается.
UserClosing - пользователь закрывает форму через пользовательский интерфейс (UI), например, нажав кнопку «Закрыть» в окне формы, выбрав «Закрыть» в меню управления окна или нажав ALT+ F4.
TaskManagerClosing - Диспетчер задач Microsoft Windows закрывает приложение.
FormOwnerClosing - форма владельца закрывается.
ApplicationExitCall - был вызван метод Exit класса Application.