从面板上删除所有按钮

Jim*_*hen 1 c# collections winforms

我正在尝试从面板中删除所有按钮。不知何故,它只用我的代码删除了一半。我不知道为什么。这是在 c# windows 形式。有人可以解释一下吗。谢谢你。代码如下:添加使用

        for(int ii=1; ii<=6; ii++)
        {
            for(int jj=1; jj<=5; jj++)
            {
                Button b = new Button();
                b.TabStop = false;
                b.Width = 146;
                b.Height = 91;
                b.Click += new EventHandler(b_Click);
                panel.Controls.Add(b);
            }
        }
Run Code Online (Sandbox Code Playgroud)

删除使用

        foreach (Control c in panel.Controls)
        {
            c.Click -= new EventHandler(this.b_Click);
            panel.Controls.Remove(c);
            c.Dispose();
        }
Run Code Online (Sandbox Code Playgroud)

Mit*_*tja 6

您的控件列表迭代到一半,因为迭代器增加而项目数量减少。在您的控制列表(内部)索引的中间大于项目的数量。

首先保存项目列表:

List<Button> buttons = panel.Controls.OfType<Button>().ToList();
foreach (Button btn in buttons)
{
    btn.Click -= new EventHandler(this.b_Click); //It's unnecessary
    panel.Controls.Remove(btn);
    btn.Dispose();
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果处理按钮,为什么要删除 Click-Event?处理后,事件被清除,按钮也无法使用。´

如果您想要 1 行解决方案,则只能使用 Dispose。它将自动从面板中删除按钮并清除所有事件等。

panel.Controls.OfType<Button>().ToList().ForEach(btn => btn.Dispose());
Run Code Online (Sandbox Code Playgroud)