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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 37 019 fois - Téléchargée 27 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
Messages postés
3
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
18 juin 2009

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();
}
Messages postés
1
Date d'inscription
mardi 13 juin 2006
Statut
Membre
Dernière intervention
12 mars 2007

c'est pas plus simple comme ça :

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

}
???
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
85
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);
}
Messages postés
9
Date d'inscription
samedi 12 avril 2003
Statut
Membre
Dernière intervention
10 avril 2014

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
Messages postés
4
Date d'inscription
vendredi 19 août 2005
Statut
Membre
Dernière intervention
12 septembre 2005

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>
Afficher les 13 commentaires

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.