[英]Deleting Textboxes in a C# Form deletes only half in foreach
我試圖通過代碼刪除文本框,但是當我試圖刪除表單中的控件時,它只會刪除其中的一半。 所以,每次我點擊按鈕時,一半的文本框被刪除,然后當我再次點擊它時刪除一半,直到沒有更多的文本框。
我的代碼有問題嗎?
foreach (Control t in properties_panel.Controls)
{
if (t is TextBox)
{
this.Controls.Remove(t);
t.Dispose();
}
}
另外,這是刪除控制對象的正確方法嗎?
您不應該在迭代時修改枚舉器!
當您從同一集合的 foreach 循環中間的控件集合中刪除一個項目時,您已經更改了枚舉器中MoveNext()
調用的下一個結束位置。 您需要先與枚舉器分開收集所有文本框引用:
var boxes = properties_panel.Controls.OfType<TextBox>().ToList();
foreach (var t in boxes)
{
properties_panel.Controls.Remove(t);
t.Dispose();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.