Каков наилучший способ отключить 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;