C# – Disabling the exit button on a windows form

.netc++winforms

Is there a way to disable the exit button on a windows form without having to import the some external .dll's? I disable the exit button by importing dll's using the following code but I don't like it. Is there a simpler (built-in) way?

    public Form1()
    {
        InitializeComponent();
        hMenu = GetSystemMenu(this.Handle, false);
    }

    private const uint SC_CLOSE = 0xf060;
    private const uint MF_GRAYED = 0x01;
    private IntPtr hMenu;

    [DllImport("user32.dll")]
    private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

    [DllImport("user32.dll")]
    private static extern int EnableMenuItem(IntPtr hMenu, uint wIDEnableItem, uint wEnable);

    // handle the form's Paint and Resize events 

    private void Form1_Paint(object sender, PaintEventArgs e)
    {
        EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED);
    }

    private void Form1_Resize(object sender, EventArgs e)
    {
        EnableMenuItem(hMenu, SC_CLOSE, MF_GRAYED);
    }

Best Solution

You can't easily disable the exit button (the one in the top right that closes the form).

You can, however, hide the button completely, by setting the ControlBox property to false.

ControlBox can be turned on and off at any time, so you can use this if you want to dynamically allow closing at some times, and not at others.

Alternatively, you can handle the FormClosing event and cancel the close if you choose.

Here's a demo.

Create a new Windows Forms project.

Drop a CheckBox control on the form, with Text "ControlBox". Hook up its Click event to this:

private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
    ControlBox = checkBox1.Checked;
}

Then, drop a second CheckBox control on the form with Text "Cancel Close". Hook up the FormClosing event of the form to this:

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

Run the application and start playing around with the checkboxes. You'll soon see how things work.