Каков наилучший способ отключить Alt + F4 в форме выигрыша С#, чтобы пользователь не закрыл форму?
Я использую форму как всплывающее диалоговое окно, чтобы отображать индикатор выполнения, и я не хочу, чтобы пользователь мог его закрыть.
Каков наилучший способ отключить Alt + F4 в форме выигрыша С#, чтобы пользователь не закрыл форму?
Я использую форму как всплывающее диалоговое окно, чтобы отображать индикатор выполнения, и я не хочу, чтобы пользователь мог его закрыть.
Это задание:
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();
Если вы посмотрите на значение FormClosingEventArgs e.CloseReason
, оно сообщит вам, почему форма закрывается. Затем вы можете решить, что делать, возможные значения:
Имя участника - Описание
Нет - причина закрытия не была определена или не может быть определена.
WindowsShutDown - операционная система закрывает все приложения перед выключением.
MdiFormClosing - родительская форма этой формы интерфейса с несколькими документами закрывается.
UserClosing - пользователь закрывает форму через пользовательский интерфейс, например, нажав кнопку "Закрыть" в окне формы, выбрав "Закрыть" в меню управления окном или нажав ALT + F4.
TaskManagerClosing - Диспетчер задач Microsoft Windows закрывает приложение.
FormOwnerClosing - Форма владельца закрывается.
ApplicationExitCall - метод Exit класса Application был вызван.
Я считаю, что это правильный способ сделать это:
protected override void OnFormClosing(FormClosingEventArgs e)
{
switch (e.CloseReason)
{
case CloseReason.UserClosing:
e.Cancel = true;
break;
}
base.OnFormClosing(e);
}
Обратите внимание, что считать приложение плохим для полного отказа от закрытия. Вы должны проверить аргументы события для события Закрытие, чтобы определить, как и почему ваше приложение было предложено закрыть. Если это из-за выключения Windows, вы не должны препятствовать тому, чтобы это произошло.
Вы можете обработать событие FormClosing
и установить FormClosingEventArgs.Cancel
на true
.
Я использую форму как всплывающее диалоговое окно, чтобы отображать индикатор выполнения, и я не хочу, чтобы пользователь мог его закрыть.
Если пользователь решил закрыть ваше приложение (и знающий) достаточно, чтобы нажать alt + f4, они, скорее всего, также будут достаточно осведомлены, чтобы запустить диспетчер задач и убить ваше приложение.
По крайней мере, с помощью alt + f4 ваше приложение может делать изящное закрытие, а не просто заставлять людей убивать его. По опыту, люди, убивающие ваше приложение, означают поврежденные файлы конфигурации, сломанные базы данных, полузавершенные задачи, которые вы не можете возобновить, и многие другие болезненные вещи.
По крайней мере, попросите их "вы уверены", а не "плоский", чтобы предотвратить это.
Это взломать, чтобы отключить Alt + F4.
private void test_FormClosing(object sender, FormClosingEventArgs e)
{
if (this.ModifierKeys == Keys.Alt || this.ModifierKeys == Keys.F4)
{
e.Cancel = true;
}
}
Это делает работу:
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;
}
}
Будет ли вызываться FormClosing даже при программном закрытии окна? Если это так, вы, вероятно, захотите добавить код, чтобы форма была закрыта, когда вы закончите с ней (вместо того, чтобы всегда отменять операцию)
Подписаться на событие FormClosing
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = e.CloseReason == CloseReason.UserClosing;
}
Только одна строка в теле метода.
В обработчике события FormClosing вы не можете допросить буфер клавиатуры (у вас даже есть доступ к этому?), если нажата [Alt] + [F4], отмените, если true, продолжите, если нет?
Скрыть кнопку закрытия формы, используя в конструкторе формы следующее:
this.ControlBox = false;