2011-03-26 41 views

回答

1

呼叫,当你想打开一个新的形式,这种方法:

private void CloseAllForms() 
{ 
    Form[] formToClose = null; 
    int i = 1; 
    foreach (Form form in Application.OpenForms) 
    { 
     if (form != this) //this is form1 
     { 
      Array.Resize(ref formToClose, i); 
      formToClose[i - 1] = form; 
      i++; 
     } 
    } 
    if (formToClose != null) 
     for (int j = 0; j < formToClose.Length; j++) 
      formToClose[j].Dispose(); 
} 

米蒂亚

+0

在那里我必须写上菜单项单击事件的代码???? – vivek 2011-03-26 12:41:49

+1

'Array.Resize'真的吗?使用一个动态大小的容器,比如'List

'。 – Tergiver 2011-03-26 12:47:23

2

这里是一个更简洁,现代的,手术的方式来关闭所有MdiChild形式:

static void CloseAllMdiChildForms() 
{ 
    foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // ToArray necessary to build a snapshot 
     form.Close(); 
} 

但是,这听起来像你想要的只是在任何给定的时间只有一个孩子的形式打开。如果是这样,MDI不适合这项工作。您可以构建UserControl,然后将它们交换出主应用程序表单。

+0

看到我有一个管理员表单,并在这种形式的菜单项很多,并打开一个新的窗体。但打开一个新的,当我再次打开一个新的表格将打开,但旧的不会close.there许多形式打开管理员的形式。当我打开任何窗体时点击一个菜单项,其他窗体应该接近。 – vivek 2011-03-26 13:18:46

+0

@vivek:我不清楚你的要求是什么,但在菜单项的点击处理程序中没有什么魔力。你必须编写在那里执行的代码,所以你可以做任何你想要的。 – Tergiver 2011-03-26 13:24:04

0

这是最好的一个:

static void CloseAllMdiChildForms() 
{ 
    foreach (var form in Application.OpenForms.Cast<Form>().Where(f => f.IsMdiChild).ToArray()) // The ToArray is necessary to build a snapshot 
    form.Close(); 
} 
相关问题