从Controls集合中删除TextBox无效

时间:2013-05-17 00:21:27

标签: c# winforms dispose

基本上我所做的是:通过点击按钮添加(n)文本框。当我再次点击它时,此代码运行:

foreach (Control c in this.Controls)
{
    TextBox tb = c as TextBox;
    if (tb != null)
    {
        this.Controls.Remove(tb);
        tb.Dispose();
    }
}

我再次添加(n)文本框,但旧文本框中的每个第二项仍然存在。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

从您正在迭代的集合中删除项目是个坏主意。试试这个:

List<Control> toBeRemoved = new List<Control>();
foreach (Control c in this.Controls)
{
    if (c instanceof TextBox)
    {
        toBeRemoved.Add(c);
    }
}
foreach (Control c in toBeRemoved)
{
    this.Controls.Remove(c);
    c.Dispose();
}