2015-11-10 23 views
0

我試圖通過代碼刪除文本框,但是當我試圖刪除表單中的控件時,它只會刪除其中的一半。所以,每次點擊按鈕時,都會刪除一半的文本框,然後再單擊一次,直到沒有更多的文本框。在C#表格中刪除文本框只會刪除一半在foreach中

我的代碼有問題嗎?

foreach (Control t in properties_panel.Controls) 
       { 
        if (t is TextBox) 
        { 
         this.Controls.Remove(t); 
         t.Dispose(); 

        } 

       } 

此外,這是刪除控制對象的正確方法嗎?

+0

什麼是properties_panel?您的properties_panel是否包含所有文本框?\ –

回答

3

你不應該在迭代時修改一個枚舉器!

當您從同一個集合的foreach循環中間的控件集合中刪除項目時,您已更改了枚舉器中的MoveNext()調用將在下一個結束的位置。您需要做一些事情來首先從統計員那裏收集所有文本框引用:

var boxes = properties_panel.Controls.OfType<TextBox>().ToList(); 
foreach (var t in boxes) 
{ 
    properties_panel.Controls.Remove(t); 
    t.Dispose(); 
} 
+0

謝謝!剛從C#visual studio開始。無論如何,這回答了我的兩個問題:) –