How to Disable Alt + F4 closing form?

Note that it is considered bad form for an application to completely prevent itself from closing. You should check the event arguments for the Closing event to determine how and why your application was asked to close. If it is because of a Windows shutdown, you should not prevent the close from happening.


This does the job:

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

Edit: In response to pix0rs concern - yes you are correct that you will not be able to programatically close the app. However, you can simply remove the event handler for the form_closing event before closing the form:

this.FormClosing -= new System.Windows.Forms.FormClosingEventHandler(this.Form1_FormClosing);
this.Close();

If you look at the value of FormClosingEventArgs e.CloseReason, it will tell you why the form is being closed. You can then decide what to do, the possible values are:

Member name - Description


None - The cause of the closure was not defined or could not be determined.

WindowsShutDown - The operating system is closing all applications before shutting down.

MdiFormClosing - The parent form of this multiple document interface (MDI) form is closing.

UserClosing - The user is closing the form through the user interface (UI), for example by clicking the Close button on the form window, selecting Close from the window's control menu, or pressing ALT+F4.

TaskManagerClosing - The Microsoft Windows Task Manager is closing the application.

FormOwnerClosing - The owner form is closing.

ApplicationExitCall - The Exit method of the Application class was invoked.


I believe this is the right way to do it:

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

  base.OnFormClosing(e);
}

Tags:

C#

.Net

Winforms