删除C#表单中的文本框仅删除foreach中的一半

时间:2015-11-10 05:38:19

标签: c# foreach textbox controls

我正在尝试通过代码删除文本框,但是当我尝试删除表单中的控件时,它只会删除其中一半。因此,每次单击按钮时,都会删除一半的文本框,然后再次单击它的一半,直到没有其他文本框。

我的代码有问题吗?

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

                    }

                }

另外,这是删除控制对象的正确方法吗?

1 个答案:

答案 0 :(得分:3)

迭代时你不应该修改枚举器!

当你从同一个集合的foreach循环中间的控件集合中删除一个项目时,你已经改变了枚举器中MoveNext()调用接下来的位置。您需要先执行一些操作,以便首先从枚举器中收集所有文本框引用:

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