Lancer une feuille fille mdi une et une seule fois

Soyez le premier à donner votre avis sur cette source.

Vue 8 506 fois - Téléchargée 900 fois

Description

Bonjour.
Cette application va résoudre un petit peu un problème que j'ai rencontré dans les forms MDI.
Au fait il s'agit de deux problèmes : le premier réside dans le fait de la possibilité d'ouvrir plusieurs instances du même formulaires, et le deuxième dans la non possibilité d'ouvrir un formulaire après sa fermeture.
Pour cela, j'ai utilisé une petite astuce :
• On va déclarer les objets représentants les formulaires fils dans le formulaire principal en mode : public static.
• Dans l'évènement du clic sur le bouton d'ouverture du formulaire fils, on teste sur sa valeur si elle est nulle pour qu'il puisse s'ouvrir.
• Dans l'évènement formclosed de le formulaire fils, on accède à l'objet dans le formulaire du menu, et on y affecte la valeur nulle (du fait qu'il est déclaré public static).
Le code source va expliquer tout le fonctionnement.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
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 36
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

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.