Désactiver Alt + F4 mais permettent la forme à être fermée par un code, CloseReason.UserClosing n'aide

StackOverflow https://stackoverflow.com/questions/2643712

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.

Était-ce utile?

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:

  1. Définir forme de KeyPreview propriété à true;
  2. Câbler forme est FormClosing et KeyDown é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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top