2010-12-11 26 views
2

J'utilise un formulaire MDI parent qui a un enfant et ils montrent très bien quand ils sont appelés par ce parent et j'utiliser pour intensiate formulaire enfantMDI réglage formulaire Problème parent Parent

ChildForm child = new ChildForm(); 
child.IsMdiContainer= this; 
child.Show(); 

œuvres dès qu'ils sont appelés du contrôle parental mais si je les appelle d'une autre forme qui n'est pas l'enfant d'une forme parentale alors ils ne restent plus fils du parent principal, une raison évidente est que quand je les intensifie sur cette forme indépendante est Je ne peux tout simplement pas utiliser child.MDIParent = this; car elle aura tendance à faire des parents de forme indépendante mais j'ai aussi essayé

MDIParentForm form = new MDIParentForm 

ChildForm child = new ChildForm(); 
child.IsMdiContainer= form ; 
child.Show(); 

mais cette dose pas non plus aider au lieu de cela, il jette une exception que la forme que je suis en train de mettre le parent est MDI Container alors ce que je donne un essai et modifie

MDIParentForm form = new MDIParentForm ; 
form.IsMdiContainer= true; 
ChildForm child = new ChildForm(); 
child.MDIParent = form ; 
child.Show(); 

et dans son résultat apparaît rien

Toute idée comment ..........

Répondre

6

Pour créer un enfant d'un autre enfant, il suffit d'écrire comme ceci:

ChildForm sibling = new ChildForm(); 
sibling.MdiParent = this.MdiParent; 
sibling.Show(); 

ou un incendie un événement personnalisé que le parent peut répondre.

+0

ok cela fonctionne bien mais si le formulaire de vous allez appeler la dose d'enfant ne pas avoir de parent laisse dire d'un parent il y a un message qui n'est pas enfant de cette forme comment alors quel régime devrait être adopté –

+0

Lots de manières. Passer la référence au parent via le constructeur du formulaire est un moyen évident. Même Application.OpenForms [0] fonctionnerait. Ou donner au parent une propriété statique, il devrait y avoir un seul parent MDI. Laisser le parent s'occuper de créer des enfants est le meilleur moyen. Cet événement personnalisé que j'ai mentionné. Ou la valeur de retour ShowDialog(). –

0

Vous devez définir le parent être le mdiform déjà existant, ne pas en créer un nouveau.

S'il n'existe pas d'instance de mdiform, vous devez non seulement créer une instance du formulaire, mais également l'afficher.

var mdiForm = new MdiForm(); 
mdiForm.IsMdiContainer = true; 
var childForm = new ChildForm(); 
childForm.MdiParent = mdiForm; 
mdiForm.Show(); 
childForm.Show(); 

Notez également que j'utilise mdiForm.IsMdiContainer, autant que je sache il n'y a pas la propriété IsMdiParent.

+0

Oui j'avais tort à la propriété name.I a essayé de faire votre code, mais n'a pas aidé me.instead il m'a montré une nouvelle forme de dialogue avoir des boîtes de contrôle doubles –

+0

Mon code montre un nouveau formulaire parce que le code crée une nouvelle instance de MdiForm. Si une instance de MdiForm existe déjà, vous devez définir la propriété Parent sur la MdiForm déjà existante, comme je l'ai dit dans la première phrase. – comecme

0

écrire ce code sous une forme mère ....

childform obj = new childform(); 
       obj.MdiParent = this; 
       obj.StartPosition = FormStartPosition.CenterScreen; 
       obj.Show();