我正在尝试通过代码删除文本框,但是当我尝试删除表单中的控件时,它只会删除其中一半。因此,每次单击按钮时,都会删除一半的文本框,然后再次单击它的一半,直到没有其他文本框。
我的代码有问题吗?
foreach (Control t in properties_panel.Controls)
{
if (t is TextBox)
{
this.Controls.Remove(t);
t.Dispose();
}
}
另外,这是删除控制对象的正确方法吗?
答案 0 :(得分:3)
迭代时你不应该修改枚举器!
当你从同一个集合的foreach循环中间的控件集合中删除一个项目时,你已经改变了枚举器中MoveNext()
调用接下来的位置。您需要先执行一些操作,以便首先从枚举器中收集所有文本框引用:
var boxes = properties_panel.Controls.OfType<TextBox>().ToList();
foreach (var t in boxes)
{
properties_panel.Controls.Remove(t);
t.Dispose();
}