我有一个包含两个按钮的表单。
第一个使用此处理程序向表单添加一些GroupBoxes
:
private void btnAdd_Click(object sender, EventArgs e)
{
GroupBox[] g_arr = new GroupBox[2];
for (int i = 0; i < g_arr.Length; i++)
{
g_arr[i] = new GroupBox();
g_arr[i].Location = new Point(280, (i*-50) + 300);
g_arr[i].Size = new Size(337, 380);
this.Controls.Add(g_arr[i]);
}
}
第二个应该删除表单中的每个GroupBoxes
,但是当点击时,并非所有private void btnDelete_Click(object sender, EventArgs e)
{
foreach (Control c in this.Controls)
{
if (c is GroupBox)
{
this.Controls.Remove(c);
}
}
}
都会消失:
GroupBox
为什么我的删除按钮无法删除每个{{1}}?
答案 0 :(得分:4)
在迭代时不要修改集合。您可以使用OfType
方法将所有GroupBoxes
和ToList
复制到列表中,以便您可以迭代它而不是原始集合:
foreach (Control c in this.Controls.OfType<GroupBox>().ToList())
{
this.Controls.Remove(c);
}
这只会删除GroupBox
的直接子控件Form
。如果你有嵌套控件,那么你需要像this answer.