Désactiver Alt + F4 mais permettent la forme à être fermée par un code, CloseReason.UserClosing n'aide
-
27-09-2019 - |
Question
Je veux que la forme ne se ferme pas en faisant Alt + F4 mais si Application.Exit()
ou this.Close
est appelé à partir du même formulaire, il doit être fermé.
J'ai essayé CloseReason.UserClosing
mais toujours pas d'aide.
La solution
Si vous avez besoin de filtrer Alt + F4 événement uniquement (en laissant un clic de case de fermeture, this.Close()
et Application.Exit()
à se comporter comme d'habitude) je peux alors proposer les éléments suivants:
- Définir forme de
KeyPreview
propriété àtrue
; -
Câbler forme est
FormClosing
etKeyDown
événements: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; }
Autres conseils
Il est très facile, vous pouvez le faire par set SuppressKeyPress propriété à true sur Form_KeyDown EventHandler comme ci-dessous.
if (e.KeyCode == Keys.F4 && e.Alt)
{
e.SuppressKeyPress = true;
}
Avec cela, vous pouvez également fermer votre forme active par jeu SuppressKeyPress propriété false sur la même eventHandller ou de toute autre manière.
Capture d'Alt + F4 raccourci clavier en définissant la propriété de KeyPreview formulaire true et en remplaçant la méthode OnProcessCmdKey.
Comment avez-vous utilisé CloseReason?
Voir l'exemple de code ici: http://msdn.microsoft.com/ fr-fr / bibliothèque / system.windows.forms.form.formclosing.aspx
Vous devez définir la propriété Annuler des FormClosingEventArgs passé objet à arrêter la fermeture du formulaire.