Deaktivieren Sie Alt + F4 aber erlauben die die Form von Code geschlossen werden soll, wird CloseReason.UserClosing nicht helfen
-
27-09-2019 - |
Frage
Ich mag, dass das Formular nicht schließen, indem Sie Alt + F4 aber wenn Application.Exit()
oder this.Close
aus dem gleichen Formular aufgerufen wird, soll es geschlossen werden.
Ich habe versucht CloseReason.UserClosing
aber immer noch keine Hilfe.
Lösung
Wenn Sie herausfiltern müssen Alt + F4 Ereignis nur (Abfahrt Klicken der Nähe Box, this.Close()
und Application.Exit()
wie gewohnt verhalten), dann kann ich folgendes vorschlagen:
- Set Form
KeyPreview
Eigenschafttrue
; -
verdrahten Form ist
FormClosing
undKeyDown
Ereignisse:private void Form1_FormClosing(object sender, FormClosingEventArgs e) { if (_altF4Pressed) { if (e.CloseReason == CloseReason.UserClosing) e.Cancel = true; _altF4Pressed = false; } } private bool _altF4Pressed; private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.Alt && e.KeyCode == Keys.F4) _altF4Pressed = true; }
Andere Tipps
Es ist sehr einfach Sie es durch den Satz tun können SuppressKeyPress Eigenschaft auf true auf Form_KeyDown Eventhandler wie unten.
if (e.KeyCode == Keys.F4 && e.Alt)
{
e.SuppressKeyPress = true;
}
Damit können Sie auch in der Nähe Ihrer aktiven Form von Set SuppressKeyPress Eigenschaft auf false auf gleiche eventHandller oder jede andere Art und Weise.
Aufnahme Alt + F4 Hotkey nach Form der KeyPreview Eigenschaft auf true und zwingende OnProcessCmdKey Methode setzen.
Wie haben Sie verwenden CloseReason?
Sehen Sie den Beispielcode hier: http://msdn.microsoft.com/ en-us / library / system.windows.forms.form.formclosing.aspx
Sie müssen die festlegen Eigenschaft der übergebenen FormClosingEventArgs Abbrechen Objekt das Formular Schließung zu stoppen.