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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 40 685 fois - Téléchargée 29 fois

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

Ajouter un commentaire Commentaires
oursdestras Messages postés 3 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 18 juin 2009
15 sept. 2007 à 16:39
Voilà ...à copier-coller dans le code du formulaire.

Pour quitter l'application:
protected override void OnClosing(CancelEventArgs e)
{

e.Cancel=(MessageBox.Show("Quitter?...","...",MessageBoxButtons.YesNo)==DialogResult.No);
if (!e.Cancel) Application.Exit();

}

OU

Pour quitter le formulaire:
protected override void OnClosing(CancelEventArgs e)
{

e.Cancel=(MessageBox.Show("Quitter?...","...",MessageBoxButtons.YesNo)==DialogResult.No);
if (!e.Cancel) this.Close();
}
cs_nicoco54 Messages postés 1 Date d'inscription mardi 13 juin 2006 Statut Membre Dernière intervention 12 mars 2007
12 mars 2007 à 15:12
c'est pas plus simple comme ça :

if(MessageBox.Show("Quitter l'application?",
"Message de confirmation" ,
MessageBoxButtons.YesNo) == DialogResult.Yes)
{
Close();

}
???
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 déc. 2005 à 22:15
Sinon, pour éviter de t'abonner à l'event Closing du Form au sein même de celui ci, préfère la surcharge de la méthode OnClosing :

protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = !AskConfirmQuitAppli();
base.OnClosing (e);
}
AbbayePlex Messages postés 9 Date d'inscription samedi 12 avril 2003 Statut Membre Dernière intervention 10 avril 2014
13 sept. 2005 à 22:18
Merci pour ta source, tous comme les autres je trouve le code un peu trop long pour ce qu'il doit faire mais il fait ce qu'il doit faire, demander une confirmation avant de quitter.

Le but quand on programme est que le code source soit lisible/compréhensible pas une autre personne afin que celle-ci soit en mesure de pouvoir modifier la source à sa guise.

Il est bien d'utilisé les if(var == true) car il sont facile à lire mais il ne faut pas abuser car à la longue ca alourdis le code (pas les performances mais la lisibilité).

Ceci n'est pas une critique mais une opinion :)

Merci pour ta participation
ylawy12 Messages postés 4 Date d'inscription vendredi 19 août 2005 Statut Membre Dernière intervention 12 septembre 2005
12 sept. 2005 à 10:03
c'est vrai qu'on peut reduire un peu ce code, il est un tantinet long.

les commentaires me semblent indispensables
et d'ailleurs ils ne sont pas vraiment normalisés,
il faut utiliser les tag <summary> et #region
pour faciliter le passage des outils de documentation

exp:
//-----------------------------------------------------------
/// <summary>
/// menu 'quitter'
/// </summary>

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.