Confirmer quitter à la fermeture d'une application en C#

Publié le par ylawy

Mise à jour, déménagement de tout le contenu vers le site:
http://www.while-true-do.com

Les articles ont été rénovés et de nouveaux ont été ajoutés.

1. Objectif
Cet article 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 (si c’est le formulaire principal) sinon l’action est annulée, l’application reste active.
 

 

2. Evènements et formulaires
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.
 
2.1. Comportement par défaut: fermeture formulaire
Le diagramme suivants d’états-évènements représente le comportement de la fenêtre lorsque cellle-ci se ferme.

La méthode Close() déclenche l’évènement Closing qui lorsqu’il est traité déclenche par défaut l’évènement Closed. C’est lors du traitement de cet évènement que la fenêtre est fermée ainsi que l’application si c’est la fenêtre principale de celle-ci. C’est aussi ici que le code de nettoyage des ressources est déclenché : libération mémoire des objets, descripteurs de fichiers, ...
 
2.2. demande de confirmation avant de quitter
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.

 

3. Mise en oeuvre de la fonctionnalité
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.
 
Les méthodes
//-----------------------------------------------------------
// 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();
}

4. Bibliographie
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpref/html/frlrfSystemWindowsFormsFormClassClosingTopic.asp
Aide MSND, évènement Closing

Pour être informé des derniers articles, inscrivez vous :
Commenter cet article
L
blog trés intéressant!
Répondre
X
Bonjour,<br /> <br /> Félicitations pour votre site qui est vraiment bien conçu! J'ai créé un annuaire de blogs et si vous souhaitez vous y inscrire voici l'adresse: http://netblog.site.cx !<br /> <br /> Bonne continuation<br />
Répondre