Как отключить форму закрытия Alt + F4?

Как лучше всего отключить Alt+ F4в форме выигрыша С #, чтобы пользователь не закрыл форму?

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

Ответов (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();

Подписаться на событие FormClosing

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    e.Cancel = e.CloseReason == CloseReason.UserClosing;
}

Только одна строка в теле метода.

Это хак для отключения 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;
  }


}

Скрыть кнопку закрытия в форме, используя в конструкторе формы следующее:

this.ControlBox = false;

Вы можете обработать FormClosing событие и установить FormClosingEventArgs.Cancel значение true .

Будет ли вызываться FormClosing, даже когда вы программно закрываете окно? Если это так, вы, вероятно, захотите добавить код, позволяющий закрыть форму, когда вы закончите с ней (вместо того, чтобы всегда отменять операцию)

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

Если пользователь настроен закрыть ваше приложение (и достаточно осведомлен), чтобы нажать alt + f4, он, скорее всего, также будет достаточно осведомлен, чтобы запустить диспетчер задач и вместо этого убить ваше приложение.

По крайней мере, с помощью alt + f4 ваше приложение может плавно завершить работу, а не просто заставить людей убить его. По опыту, люди, убивающие ваше приложение, означают поврежденные файлы конфигурации, сломанные базы данных, незавершенные задачи, которые вы не можете возобновить, и многие другие болезненные вещи.

По крайней мере, напомните им: «Вы уверены?», А не решительно препятствуйте этому.

Обратите внимание, что для приложения считается дурным тоном полностью предотвращать закрытие. Вы должны проверить аргументы события для события Closing, чтобы определить, как и почему ваше приложение было предложено закрыть. Если это произошло из-за выключения Windows, не следует предотвращать закрытие.

Если вы посмотрите на значение из 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);
}