Hi, I want that the form will not close by doing Alt+F4 but if Application.Exit() or this.Close is called from the same Form, it should be closed.
I tried CloseReason.UserClosing but still no help.
Hi, I want that the form will not close by doing Alt+F4 but if Application.Exit() or this.Close is called from the same Form, it should be closed.
I tried CloseReason.UserClosing but still no help.
Capture Alt+F4 hotkey by setting Form's KeyPreview property to true and overriding OnProcessCmdKey method.
How did you use CloseReason?
See the sample code here: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx
You need to set the Cancel property of the passed FormClosingEventArgs object to stop the form closing.
If you need to filter out Alt+F4 event only (leaving clicking of close box, this.Close()
and Application.Exit()
to behave as usual) then I can suggest the following:
KeyPreview
property to true
;Wire up form's FormClosing
and KeyDown
events:
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (_altF4Pressed)
{
if (e.CloseReason == CloseReason.UserClosing)
e.Cancel = true;
_altF4Pressed = false;
}
}
private bool _altF4Pressed = false;
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Alt && e.KeyCode == Keys.F4)
_altF4Pressed = true;
}