Сведения о вопросе

krutoi

09:38, 6th August, 2020

Теги

c#   .net   winforms    

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

Просмотров: 788   Ответов: 11

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

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



  Сведения об ответе

DINO

21:06, 1st October, 2020

Это делает свою работу:

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


  Сведения об ответе

SEEYOU

02:27, 10th August, 2020

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

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


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

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

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

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

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

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

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


  Сведения об ответе

SKY

05:07, 14th August, 2020

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

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

  base.OnFormClosing(e);
}


  Сведения об ответе

LAST

17:56, 23rd August, 2020

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


  Сведения об ответе

dumai

07:55, 8th August, 2020

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


  Сведения об ответе

JUST___

13:55, 13th August, 2020

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

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

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

По крайней мере, подскажите им: "вы уверены?", а не просто предотвратите это.


  Сведения об ответе

DO__IT

23:56, 2nd August, 2020

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

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


  Сведения об ответе

9090

08:43, 14th August, 2020

Это делает свою работу:

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


}


  Сведения об ответе

repe

14:01, 19th August, 2020

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


  Сведения об ответе

dump

18:04, 19th August, 2020

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

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

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


  Сведения об ответе

P_S_S

04:49, 10th August, 2020

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

this.ControlBox = false;


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться