CONFIRMER "QUITTER" À LA FERMETURE D'UNE APPLICATION WINFORMS/C#

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 8 sept. 2005 à 11:31
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
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/33702-confirmer-quitter-a-la-fermeture-d-une-application-winforms-c

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 6349 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>
taoetc Messages postés 346 Date d'inscription lundi 8 septembre 2003 Statut Membre Dernière intervention 3 septembre 2007 3
12 sept. 2005 à 08:42
ou variable = Boolean.Parse("false");

heu oui, commentaire tout à fait inutile, mais bon, je participe


Allégé le code ne veut pas dire bien entendu suppriemr les commentaires

mais avoir 10 lignes au lieu de 40 , c'est quand meme préférable, surtout quand on multiplie le nombre de lignes par mille
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 sept. 2005 à 21:03
mouarf... en C#, ca marche pas, alors qu'en C/C++ (vb aussi... mais bon) ok.
par contre, tu peux faire :
variable = Convert.ToBoolean(0);

:P
cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
8 sept. 2005 à 20:51
C'est que c'est un nerveux le Seby :D

Private joke:

if( variable == true ) //si variable est vrai
{ //accolade ouvrante
variable = 0; //on met variable à zéro
} //accolade fermante, fin de si variable est vrai

:D
ylawy12 Messages postés 4 Date d'inscription vendredi 19 août 2005 Statut Membre Dernière intervention 12 septembre 2005
8 sept. 2005 à 18:44
écrire if(truc) n'est pas plus optimisé que d'écrire
if(truc==true)

on est dans le code source, le compilateur produit du code msil et c'est lui va être exécuté.
en l'occurence, pour les 2 écriture du if, le code généré est exactement le même (instruction brtrue ou brfalse) et c'est logique
parce que écrire if(truc) a forçement comme signification:
si truc est égal à vrai

au fond, il n'y a pas d'écriture plus ou moins bien, elles ont leur intérêt et leur point faible. les 2 sont tout a fait valables.
c'est mon expérience d'avoir trainé dans de nombreux sources (notamment du C et C++, le plus fatiguant) qui me fait préférer un style plus verbeux avec l'inconvénient de rallonger les codes sources, c'est sur.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 sept. 2005 à 16:54
en fait, quand je parle simplification... c'est surtout optimisation.
Le booléen est un type particulier, il se suffit généralement à lui-même.
Je ne vois pas l'intérêt de faire if (machin == true), puisque machin ne peut-être que true ou false.
ylawy12 Messages postés 4 Date d'inscription vendredi 19 août 2005 Statut Membre Dernière intervention 12 septembre 2005
8 sept. 2005 à 16:39
J'ai plutôt l'habitude d'être "verbeux" dans le code et aussi dans les commentaires.
Ca fait longtemps que j'ai abandonné les pratiques style langage C, je préfére largement écrire if(truc==true/false) plutôt qu'utiliser les raccourcis trop concis -parfois utiles, c'est sûr- disponibles dans les langages.
c'est peut-être du à tous ces sources remplis à la va-vite de milliers de lignes de codes sans un brin de commentaires que j'ai du arpentés à la recherche de bugs ou qu'il fallait améliorer/réutiliser qui m'ont, eux, énervés.

Alors je préfére tout écrire -faire du clair-, c'est vrai que ca rallonge le code mais bon on ne paye pas la place dans un source et le but n'est pas de faire court mais de faire lisible et que ca marche et comme ca on peut tenir des milliers de lignes de codes.

C'est peut-être qu'aussi l'age avançant, mon cerveau a tendance à ramollir un peu à force de voir de tout et aussi de faire d'autres choses.

sinon, pour tempérer mon discours, la simplification
return MessageBox.Show(...) dans la méthode AskConfirmQuitAppli() est intéressante, je la retiens.
merci d'avoir commenté le code.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 sept. 2005 à 11:33
juste une remarque parce que je vois souvent et ca m'énerve... :@

on écrit pas : if (truc == false), mais if (!truc)
pareil pour : if (truc == true), mais if (truc)

pour :
if (truc)
e.Cancel = false;
else
e.Cancel = true;

on peut faire : e.Cancel = !truc;

voila.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
8 sept. 2005 à 11:31
on peut largement simplifier :

# //-----------------------------------------------------------
# // demande au user confirmation pour quitter,
# // renvoie true si confirmé
# private bool AskConfirmQuitAppli()
# {
# // message confirmation quitter l'application
# return MessageBox.Show("Quitter l'application?",
# "Message de confirmation" ,
# MessageBoxButtons.YesNo) == DialogResult.Yes);
# }
# //-----------------------------------------------------------
# // 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
# e.Cancel = !AskConfirmQuitAppli();
# }
#