2012-09-12 45 views
0

我向面板添加了几个窗体。表单具有属性关闭Windows窗体中的控件中的所有窗体

form.TopLevel = false; 
form.Parent = pnlMain; 

现在我想遍历pnlMain中的所有窗体并关闭所有窗体。要做到这一点,我有以下代码:

private void CloseForms() 
{ 
    foreach(Form form in pnlMain.Controls.OfType<Form>()) 
     form.Close(); 
} 

我的问题是,并非所有窗体都关闭。

在具有四个开形式的例子:我计数的开放形式,

int count = pnlMain.Controls.OfType<Form>().Count(); 

当我打电话CloseForms,只有两种形式都关闭。另外两个在CloseForms的另一个电话上关闭。

如何只用一个电话关闭所有窗体?

+0

东西在oncloseing?或关闭事件? – BugFinder

+0

OT:你不应该在面板中有表单。看看UserControls。 –

+0

我想在此面板中将子窗体作为子窗体。所以userconrols不适合。 – Tomtom

回答

4

不要在迭代时修改集合。试试这个

foreach(Form form in pnlMain.Controls.OfType<Form>().ToArray()) 
+1

虽然ToArray可能稍微更有效,但我仍将使用ToList作为一般练习。 –

+0

这工作。谢谢。 但是,如果我不使用.ToArray,为什么要修改集合?只是为了我的知识:) – Tomtom

+0

@Tomtom关闭窗体将它从你的情况下的'pnlMain.Controls'容器中移除。 –