2010-11-17 19 views
7

Ich habe drei Formen.Alle offenen Formulare verbergen

Können sagen, A, B, C.

Form A öffnet Form B und Form B dann Form C.

öffnet ich hinzugefügt haben Taste ausblenden alle offenen Formen in Form C.

Wie kann ich nun alle drei Formulare mit dieser Schaltfläche ausblenden?

Ich weiß One Way nutzt ShowWindow Api, aber ich möchte nicht Api Anrufe verwenden.

Bearbeiten: Dank SoMoS.

for (int i = Application.OpenForms.Count - 1; i >= 0; i += -1) 
{ 
    if (!object.ReferenceEquals(Application.OpenForms[i], this)) 
    { 
      Application.OpenForms[i].Hide(); 
    } 
} 
this.Hide(); 

Oder

In Form A (dank ho1)

B frm = new B(); 
frm.Owner = this; 
frm.Show(); 

In Form B

C frm = new C(); 
frm.Owner = this; 
frm.Show(); 

In Form Schaltfläche click-Ereignis C.

Owner.Owner.Hide(); 
Owner.Hide(); 
Hide(); 

Oder dank Wim Coenen

foreach (Form var in Application.OpenForms) 
{ 
    var.Hide(); 
} 

Dank.

+3

Seltsam, wie Sie ein C++ Programmierer vor Ort können sofort von der Art, wie sie schreiben ihre C# -Schleifen. Warum nicht einfach foreach (var form in Application.OpenForms) form.Hide(); –

+0

@Wim Coenen Danke für den Vorschlag. – Searock

Antwort

7

Sie müssen nur diese Sammlung zuzugreifen:

Application.OpenForms 

Dann müssen Sie nur alle Elemente iterieren und verstecken die, die Sie wollen (Sie nach Titel zum Beispiel überprüfen können) oder verstecken gerade alle von ihnen .

Ich hoffe, es hilft.

3

Dies funktioniert:

Owner.Owner.Hide(); 
Owner.Hide(); 
Hide(); 

Oder wenn Sie sich nicht sicher sind, wie viele Formen gibt es in der Kette sein wird, Sie könnten nur eine rekursive Methode haben.

Dies hängt jedoch davon ab, dass A der Besitzer von B usw. ist, den Sie vereinbaren können, indem Sie this als Parameter an die Aufrufe an Show senden, wenn Sie die Formulare anzeigen.

+0

Ich weiß nicht, warum ich einen Fehler bekomme "Objektverweis nicht auf eine Instanz eines Objekts festgelegt." Funktioniert das nur mit Mdi-Formen? – Searock

+0

Sie erhalten diesen Fehler, wenn Sie versuchen, eine Methode eines Objekts aufzurufen, wenn dieses Objekt null ist, z. B. wenn ein Formular keinen Eigentümer hat. –

+0

Die Formulare haben keinen Eigentümer, da sie keine Dialogformulare sind. Ein anderer Weg muss benutzt werden. –

0

Anstatt alle Formulare zu verstecken, können Sie die Tatsache nutzen, dass das Minimieren eines Formulars automatisch alle untergeordneten Formulare minimiert. Also, wenn C.Owner = B, B.Owner = A, könnte man einfach nutzen (in Ihrem Click-Handler in A):

WindowState = FormWindowState.Minimized 
-2
Form2 NewForm = new Form2(); 
this.Hide(); //Hide Current form 
NewForm..ShowDialog(); //Show new form 
this.Show(); //Show Previous form After close new form 
Verwandte Themen