2016-07-29 101 views
0

我創建了一些用戶控件,我在VS 2013中以編程方式放置在窗體上。這些控件有時需要刪除和重新創建。我試過用兩種不同的方式刪除控件。一個工作,一個不工作。我希望有人能提供洞察力,爲什麼一個人不工作。從窗體C中刪除控件#

這個版本不工作(只發現四分之二的控制):

// delete user controls from the front panel 
foreach (UserControl ctrl in this.Controls.OfType<StationControl>()) 
{ 
    this.Controls.Remove(ctrl); 
} 

這個版本不工作(發現四分之四的控件):

// delete user controls from the front panel 
var uc_list = this.Controls.OfType<StationControl>().ToArray(); 
foreach (var ctrl in uc_list) 
{ 
    this.Controls.Remove(ctrl); 
} 

我可以計數匹配類型的用戶控件的數量沒有問題(例如

int controlCount = this.Controls.OfType<StationControl>().Count() 

那麼爲什麼第一個foreach st工作不全面?

+2

因爲,在第一個例子,你從你所在的同一個集合中移除控制循環結束。在第二個你循環不同的集合,並從窗體控件集合中刪除 – Steve

+0

可能的重複[有效地從'foreach'內刪除項目](http://stackoverflow.com/questions/8791557/efficiently-deleting-item-從在之內的foreach) –

回答

0

這項工作?

foreach (UserControl ctrl in this.Controls.OfType<StationControl>()) 
{ 
    ctrl.Dispose(); 
    this.Controls.Remove(ctrl); 
} 

我希望這有助於。

編輯:

以上將無法正常工作,這裏是一個工作方法:

while (this.Controls.OfType<StationControl>().Count() > 0) 
{ 
    UserControl ctrl = this.Controls.OfType<StationControl>().First(); 

    ctrl.Dispose(); 
    this.Controls.Remove(ctrl); 
}