2010-12-11 16 views
2

Ich bin mit einem Elternteil MDI Form, die ein Kind hat und sie zeigen sich sehr gut, wenn sie von diesem Elternteil aufgerufen und ich verwende Kind Formular intensiate alsgeordnetes MDI-Formular Problem Einstellung Eltern

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

Werke sobald sie von der elterlichen Kontrolle aufgerufen werden, aber wenn ich sie von einer anderen Form anrufe, die kein Kind irgendeiner Elternform ist, dann bleiben sie nicht mehr Kind des Hauptelternteils. Ein offensichtlicher Grund ist, dass wenn ich sie auf dieser unabhängigen Form intensiviere Ich kann einfach nicht child.MDIParent = this; weil es unabhängig Form Elternteil zu machen neigen dazu, aber ich habe auch

MDIParentForm form = new MDIParentForm 

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

aber auch wirft es eine Ausnahme statt diese Dosis nicht versucht, zu helfen, dass die Form, die ich gesetzt Elternteil bin nicht versuchen, MDI Container ist dann das gebe ich einen Versuch und

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

ändern und im Ergebnis nichts erscheint

Irgendeine Idee, wie man ..........

Antwort

6

Um ein Kind von einem anderen Kind zu erstellen, schreiben Sie einfach es wie folgt aus:

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

Oder eine benutzerdefinierte Ereignis ausgelöst, dass die Eltern zu reagieren.

+0

ok das funktioniert gut, aber was ist, wenn das Formular von Ihnen anrufen das Kind Dosis haben keine Eltern können sagen, von einem Elternteil gibt es eine Popup-Nachricht, die nicht Kind dieses Formulars ist, wie dann welches Schema angenommen werden sollte –

+0

Lots Von Wegen. Die Übergabe des Verweises an den Eltern über den Konstruktor des Formulars ist ein offensichtlicher Weg. Sogar Application.OpenForms [0] würde funktionieren. Wenn dem Elternelement eine statische Eigenschaft zugewiesen wird, sollte nur ein MDI-Elternelement vorhanden sein. Es ist der beste Weg, dem Elternteil zu überlassen, Kinder zu schaffen. Dieses benutzerdefinierte Ereignis erwähnte ich. Oder der Rückgabewert ShowDialog(). –

0

Sie die Eltern setzen soll um die bereits existierende Form zu sein, nicht um eine neue zu erstellen.

Wenn es noch keine Instanz von mdiform gibt, sollten Sie nicht nur eine Instanz des Formulars erstellen, sondern es auch anzeigen.

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

auch feststellen, dass ich mdiForm.IsMdiContainer, AFAIK gibt es keine IsMdiParent Eigenschaft.

+0

Ja, ich war falsch auf dem Grundstück name.I versucht, Ihren Code zu tun, sondern half nicht me.instead es zeigte mir eine neue Dialogform mit doppelten Steuerfeldern –

+0

Mein Code zeigt ein neues Formular an, da der Code eine neue Instanz des MdiForm erstellt. Wenn eine Instanz von MdiForm bereits existiert, sollten Sie die Parent-Eigenschaft auf die bereits vorhandene MdiForm setzen, wie ich im ersten Satz gesagt habe. – comecme

0

schreiben Dieser Code in einer übergeordneten Form ....

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