Confirmer "quitter" à la fermeture d'une application winforms/c#

Contenu du snippet

Concerne le codage d?une confirmation demandée à l?utilisateur avant de quitter une application Windows classique à base de formulaires en C# (WinForms). Il est possible de quitter l?application de plusieurs manières :
(1) Activer l?option de menu, (2) appuyer sur un bouton, (3) cliquer sur X en haut à gauche de la fenêtre Windows ou enfin (4) appuyer sur les touches Alt-F4.

Quelle que soit la provenance de la demande, une boîte de dialogue apparaît demandant confirmation de quitter à l?utilisateur. Si celui-ci appuie sur ?Oui?, l?application se termine (seulement si c?est le formulaire principal) sinon l?action est annulée, l?application reste ouverte.

L?interface et ses objets : formulaires, boutons,? sont pilotés par les évènements auxquels ils réagissent par exécution d?une action. Les évènements qui concernent la fermeture d?un formulaire sont closing et closed déclenchés par la méthode Close(), appelés automatiquement lorsque l?utilisateur clique sur le X de la fenêtre ou s?il active la combinaison de touches Alt-F4. Ce comportement est déjà géré par défaut (sauf pour le bouton et l?option de menu Quitter) mais ne propose pas de demande confirmation, l?action est immédiate.

Pour gérer la fermeture de la fenêtre depuis plusieurs endroits, il suffit de faire appel à la méthode Close() du formulaire et déclencher les évènements et actions correspondants. Pour gérer la demande de confirmation avant de fermer, il suffit d?intercepter l?évènement Closing et d?intégrer le code qui fait appel à la boîte de dialogue de confirmation.

Pour mettre en place des fonctionnalités de fermeture d?application, dans le projet de développement sur le formulaire principal (appelé MainForm dans ce document), posez un bouton Quitter, un menu Fichier avec une option Quitter. Créer des méthodes sur le click bouton et le click de l?option menu.
Créez une méthode AskConfirmQuitAppli()qui va se charger d?afficher la boîte de dialogue de confirmation. Cette méthode est appelée dans le traitement de l?évènement Closing, le résultat (vrai/faux) agit sur la variable e.cancel qui contrôle le déclenchement de l?évènement Closed.

Source / Exemple :


//-----------------------------------------------------------
// demande au user confirmation pour quitter, 
// renvoie true si confirmé
private bool AskConfirmQuitAppli()
{
       // message confirmation quitter l'application
       if(MessageBox.Show("Quitter l'application?",
                          "Message de confirmation" ,
                          MessageBoxButtons.YesNo) == DialogResult.No)
             // non
             return false;
                    
       // oui, quitter
       return true;
}
//-----------------------------------------------------------
// event déclenchée par Close()
// déclenche ensuite event Closed sauf si annulé
private void MainForm_Closing(
        object sender, System.ComponentModel.CancelEventArgs e)
{
       //non confirmé, opération annulée, ne déclenche pas event Closed
       if(AskConfirmQuitAppli()==false)
             e.Cancel= true;
}
 
//-----------------------------------------------------------
// bouton 'quitter'
private void button1_Click(object sender, System.EventArgs e)
{
       // déclenche closing (demande de confirmation)
       Close();
}
 
//-----------------------------------------------------------
// menu 'quitter'
private void menuItem3_Click(object sender, System.EventArgs e)
{
       // déclenche closing (demande de confirmation)
       Close();
}

Conclusion :


Cet article est repris et amélioré (derniere version) sur le site:
www.while-true-do.com
à l'url suivante:
http://www.while-true-do.com/index.php?id=5

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.