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

c# .net winforms

60736 просмотра

11 ответа

3982 Репутация автора

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

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

Автор: Ryan Sampson Источник Размещён: 18.08.2008 05:16

Ответы (11)


13 плюса

22037 Репутация автора

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

Автор: Timbo Размещён: 18.08.2008 05:20

100 плюса

27720 Репутация автора

Решение

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

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();
Автор: Martin Размещён: 18.08.2008 05:27

2 плюса

23593 Репутация автора

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

Автор: pix0r Размещён: 18.08.2008 05:46

16 плюса

289714 Репутация автора

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

Автор: Lasse Vågsæther Karlsen Размещён: 18.08.2008 09:19

12 плюса

85256 Репутация автора

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

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

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

По крайней мере, попросите их сказать «Вы уверены», а не вывести их из строя?

Автор: Orion Edwards Размещён: 18.08.2008 09:25

54 плюса

8556 Репутация автора

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

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


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

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

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

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

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

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

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

Автор: Matt Warren Размещён: 08.09.2008 09:10

24 плюса

864 Репутация автора

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

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

  base.OnFormClosing(e);
}
Автор: antsyawn Размещён: 09.01.2009 01:17

2 плюса

14441 Репутация автора

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

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

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

Автор: linquize Размещён: 05.03.2013 04:45

-3 плюса

375 Репутация автора

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

this.ControlBox = false;
Автор: Bharath theorare Размещён: 19.06.2016 04:09

4 плюса

41 Репутация автора

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

private void test_FormClosing(object sender, FormClosingEventArgs e)
{
    if (this.ModifierKeys == Keys.Alt || this.ModifierKeys == Keys.F4) 
    { 
        e.Cancel = true; 
    }    
}
Автор: Brahim Bourass Размещён: 16.11.2017 01:53

3 плюса

39 Репутация автора

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

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


}
Автор: Condorkunka Размещён: 31.05.2018 12:57
32x32