隐藏所有开放的表格

我有三种forms。

让我们说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(); 

要么

formsA(感谢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(); } 

谢谢。

您只需要访问此集合:

 Application.OpenForms 

然后你只需要迭代所有项目并隐藏你想要的项目(你可以通过标题检查)或者只是隐藏所有项目。

希望能帮助到你。

这有效:

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

或者,如果您不确定链中将有多少表单,您可以使用递归方法。

虽然这取决于A是B等的所有者,您可以通过this作为参数发送到Show表单时调用Show来安排。

您可以使用最小化表单的事实,而不是隐藏所有表单,自动最小化所有表单。 所以一旦C.Owner = B,B.Owner = A,你就可以使用(在A中的Click处理程序中):

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