LANCER UNE FEUILLE FILLE MDI UNE ET UNE SEULE FOIS

Signaler
Messages postés
154
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
21 février 2019
-
Messages postés
174
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
-
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

Messages postés
174
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
4
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.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
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;
}
Messages postés
5
Date d'inscription
mardi 1 avril 2003
Statut
Membre
Dernière intervention
30 juillet 2006

Mille excuses j'ai copié mon bout de code trop vite. La ligne :
frm1= new F_Fourniss()
est en fait evidemment
frm1 = new Form1();
Messages postés
5
Date d'inscription
mardi 1 avril 2003
Statut
Membre
Dernière intervention
30 juillet 2006

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...
Messages postés
154
Date d'inscription
samedi 10 septembre 2005
Statut
Membre
Dernière intervention
21 février 2019

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