动态添加和删除组框

时间:2015-02-04 15:02:31

标签: c# winforms dynamic groupbox

我有一个包含两个按钮的表单。

第一个使用此处理程序向表单添加一些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}}?

1 个答案:

答案 0 :(得分:4)

在迭代时不要修改集合。您可以使用OfType方法将所有GroupBoxesToList复制到列表中,以便您可以迭代它而不是原始集合:

foreach (Control c in this.Controls.OfType<GroupBox>().ToList())
{
     this.Controls.Remove(c);
} 

这只会删除GroupBox的直接子控件Form。如果你有嵌套控件,那么你需要像this answer.

那样的递归搜索