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

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

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

Ответ 1

Это задание:

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();

Ответ 2

Если вы посмотрите на значение FormClosingEventArgs e.CloseReason, оно сообщит вам, почему форма закрывается. Затем вы можете решить, что делать, возможные значения:

Имя участника - Описание


Нет - причина закрытия не была определена или не может быть определена.

WindowsShutDown - операционная система закрывает все приложения перед выключением.

MdiFormClosing - родительская форма этой формы интерфейса с несколькими документами закрывается.

UserClosing - пользователь закрывает форму через пользовательский интерфейс, например, нажав кнопку "Закрыть" в окне формы, выбрав "Закрыть" в меню управления окном или нажав ALT + F4.

TaskManagerClosing - Диспетчер задач Microsoft Windows закрывает приложение.

FormOwnerClosing - Форма владельца закрывается.

ApplicationExitCall - метод Exit класса Application был вызван.

Ответ 3

Я считаю, что это правильный способ сделать это:

protected override void OnFormClosing(FormClosingEventArgs e)
{
  switch (e.CloseReason)
  {
    case CloseReason.UserClosing:
      e.Cancel = true;
      break;
  }

  base.OnFormClosing(e);
}

Ответ 4

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

Ответ 5

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

Ответ 6

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

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

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

По крайней мере, попросите их "вы уверены", а не "плоский", чтобы предотвратить это.

Ответ 7

Это взломать, чтобы отключить Alt + F4.

private void test_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.ModifierKeys == Keys.Alt || this.ModifierKeys == Keys.F4) 
    { 
        e.Cancel = true; 
    }    
}

Ответ 8

Это делает работу:

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;
  }


}

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

В обработчике события FormClosing вы не можете допросить буфер клавиатуры (у вас даже есть доступ к этому?), если нажата [Alt] + [F4], отмените, если true, продолжите, если нет?

Ответ 12

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

this.ControlBox = false;