2010-11-17 77 views
7

我有三種形式。隱藏所有打開的表格

比方說A,B,C

形式A打開B型和B型,然後打開形式C.

我已經添加按鈕隱藏所有打開的形式形式C.

現在如何使用此按鈕隱藏所有三種形式?

我知道一種方法是使用ShowWindow Api,但我不想使用Api調用。

編輯:感謝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(); 

或者

在形式A(感謝ho1

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

在B型

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

在C形的按鈕單擊事件。

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

或者由於Wim Coenen

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

感謝。

+3

奇怪你是如何發現一個C++程序員立刻從他們寫的方式他們的C#循環。爲什麼不只是'foreach(var在Application.OpenForms中)form.Hide();'? – 2010-11-17 08:43:46

+0

@Wim Coenen謝謝你的建議。 – Searock 2010-11-17 08:48:34

回答

7

你只需要訪問這個集合:

Application.OpenForms 

然後你只需要通過遍歷所有的項目和隱藏你想要的(你可以通過標題例如檢查)中的那些或只是隱藏所有的。

希望它有幫助。

3

這工作:

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

或者,如果你不確定多少形式會有鏈中,你可以只是有一個遞歸方法。

雖然這取決於A是B等的擁有者,您可以通過發送this作爲參數,在顯示錶單時調用Show來安排。

+0

我不知道爲什麼我得到一個錯誤「對象引用未設置爲對象的實例」。這隻適用於Mdi表單嗎? – Searock 2010-11-17 08:13:55

+0

如果您試圖在對象爲空時調用對象的方法(例如,如果表單沒有所有者),則會出現該錯誤。 – 2010-11-17 08:16:41

+0

表單沒有所有者,因爲它們不是對話框形式。另一種方式必須使用。 – 2010-11-17 08:18:46

0

而不是隱藏所有窗體,您可以使用最小化窗體的事實,自動最小化它的所有子窗體。所以一旦C.Owner = B,B.Owner = A,你可以只使用(在一個你的Click處理程序):

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