删除 C# 窗体中的文本框只会删除 foreach 中的一半
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();
}
我试图通过代码删除文本框,但是当我试图删除表单中的控件时,它只删除了一半。因此,每次我单击该按钮时,都会删除一半的文本框,然后在我再次单击它时删除一半,直到不再有文本框为止。
我的代码有问题吗?
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();
}