LANCER UNE FEUILLE FILLE MDI UNE ET UNE SEULE FOIS

anadeveloppeur Messages postés 153 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 21 février 2019 - 17 juil. 2009 à 12:23
LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 - 24 juil. 2009 à 11:44
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/50323-lancer-une-feuille-fille-mdi-une-et-une-seule-fois

LordOfTheShadow Messages postés 174 Date d'inscription vendredi 22 décembre 2000 Statut Membre Dernière intervention 9 septembre 2010 5
24 juil. 2009 à 11:44
Sebmafate a raison. Un design pattern Singleton va te permettre de n'instancier qu'une seule fois un objet quelconque. Du coup ton formulaire mdi fille ne s'affiche qu'une fois.
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
20 juil. 2009 à 10:22
Bonne idée... mais le plus simple et le plus propre est d'utiliser une classe singleton... ainsi plutot que de faire :
if (frm1 == null) {
...
}

il suffit de faire
Form1 frm1 = Form1.Show(this);
frm1.Activate();

La méthode Show de Form1 devra être construite comme ceci :

private static Form1 instance;
public static Form Show(Form parentMdi) {
if (instance == null) {
instance = new Form1();
instance.MdiParent = parentMdi;
}

instance.Show();
return instance;
}
giloutho Messages postés 5 Date d'inscription mardi 1 avril 2003 Statut Membre Dernière intervention 30 juillet 2006
17 juil. 2009 à 20:18
Mille excuses j'ai copié mon bout de code trop vite. La ligne :
frm1= new F_Fourniss()
est en fait evidemment
frm1 = new Form1();
giloutho Messages postés 5 Date d'inscription mardi 1 avril 2003 Statut Membre Dernière intervention 30 juillet 2006
17 juil. 2009 à 20:16
Bonjour,

Très bien ton source... Utile car je suis en plein dans les MDI en ce moment. J'ai légèrement modifié ton code d'ouverture de fenêtre :
if (frm1 == null)
{
frm1 = new Form1();
frm1.MdiParent = this;
}
frm1.Show();
Jai fait :
if (frm1 == null)
{
frm1 = new F_Fourniss();
frm1.MdiParent = this;
frm1.Show();

}
frm1.Activate();
Cela redonne le focus à la fenêtre et la remet au premier plan...
anadeveloppeur Messages postés 153 Date d'inscription samedi 10 septembre 2005 Statut Membre Dernière intervention 21 février 2019
17 juil. 2009 à 12:23
Merci à krimog qui grace à lui je me suis inspiré de la solution depuis le sujet : http://www.csharpfr.com/forum/sujet-LANCER-FEUILLE-FILLE-MDI-SEULE-FOIS_1105654.aspx#5
Cordialement.

SimO TM