2012-09-12 84 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'容器中移除。 –