Lancer une feuille fille mdi une et une seule fois

Soyez le premier à donner votre avis sur cette source.

Vue 7 900 fois - Téléchargée 840 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
175
Date d'inscription
vendredi 22 décembre 2000
Statut
Membre
Dernière intervention
9 septembre 2010
2 -
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
4947
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
30 -
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
-
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
-
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
156
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

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.