yeahumok yeahumok - 1 month ago 7
C# Question

Escape button to close Windows Forms form in C#

I have tried the following:

private void Form1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if ((Keys) e.KeyValue == Keys.Escape)
this.Close();
}


But it doesn't work.

Then I tried this:

protected override void OnKeyDown(KeyEventArgs e)
{
base.OnKeyDown(e);
if (e.KeyCode == Keys.Escape)
this.Close();
}


And still nothing's working.

The KeyPreview on my windows form properties is set to true... What am I doing wrong?

Answer

This will always work, regardless of proper event handler assignment, KeyPreview, CancelButton etc:

    protected override bool ProcessCmdKey(ref Message msg, Keys keyData) {
        if (keyData == Keys.Escape) {
            this.Close();
            return true;
        }
        return base.ProcessCmdKey(ref msg, keyData);
    }
Comments