Как отключить сочетание клавиш Alt + F4 для закрытия формы?
Что является лучшим способом, чтобы отключить Alt + F4 в форме c# win, чтобы предотвратить закрытие формы пользователем?
Я использую форму как всплывающее диалоговое окно для отображения индикатора выполнения, и я не хочу, чтобы пользователь мог закрыть его.
11 ответов:
это работает:
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; }
Edit: в ответ на озабоченность pix0rs - да, вы правы, что вы не сможете программно закрыть приложение. Однако, вы можете просто удалить обработчик событий для события form_closing перед закрытием форма:
this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing); this.Close();
@TK
Если вы посмотрите на значение
FormClosingEventArgs e.CloseReason
, это скажет вам, почему форма закрывается. Затем вы можете решить, что делать, возможные значения:имя пользователя - описание
нет - причина закрытия не была определена или не могла быть определена.
WindowsShutDown - операционная система закрывает все приложения перед завершением вниз.
MdiFormClosing - родительская форма этой формы интерфейса нескольких документов (MDI) закрывается.
UserClosing - пользователь закрывает форму через пользовательский интерфейс( UI), например, нажав кнопку Закрыть в окне формы, выбрав закрыть в меню управления окна или нажав 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, вы не должны препятствовать закрытию.
Я использую форму как всплывающее диалоговое окно для отображения индикатора выполнения, и я не хочу, чтобы пользователь мог закрыть его.
если пользователь решил закрыть ваше приложение (и достаточно осведомлен), чтобы нажать alt+f4, они, скорее всего, также будут достаточно осведомлены, чтобы запустить Диспетчер задач и убить ваше приложение вместо этого.
по крайней мере, с alt+f4 ваше приложение может сделать изящное завершение работы, а не просто заставить людей убить его. По опыту, люди убивают ваше приложение означает поврежденные файлы конфигурации, сломанные базы данных, незавершенные задачи, которые вы не можете возобновить, и многие другие болезненные вещи.
по крайней мере, подскажите им "вы уверены", а не просто предотвратите это.
это работает для меня 100% это для отключения ALT + F4
private void test_FormClosing(object sender, FormClosingEventArgs e) { if (test.ModifierKeys == Keys.Alt || test.ModifierKeys == Keys.F4) { e.Cancel = true; } }
будет ли FormClosing вызываться даже при программном закрытии окна? Если это так, вы, вероятно, захотите добавить некоторый код, чтобы форма была закрыта, когда вы закончите с ней (вместо того, чтобы всегда отменять операцию)
подписаться на событие FormClosing
private void Form1_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = e.CloseReason == CloseReason.UserClosing; }
только одна строка в теле метода.