如何使用foreach循环删除面板中的所有控件?

Ser*_*pia 4 c# foreach winforms

这是我的代码:

private void ClearSearchResults()
    {
        foreach (Control X in panel1.Controls)
        {
            panel1.Controls.Remove(X);
        }
    }
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行此方法时,只删除一个项目,然后如果我再次单击一个按钮以便该方法可以再次运行,则删除另一个项目.

如果我的面板中有10个控件,我必须多次单击程序上的"删除"按钮才能删除所有控件.

在这种情况下我该怎么办?

Ree*_*sey 16

通常,在迭代从中生成的枚举时,您无法从集合中删除.而不是使用foreach,典型的方法是使用for循环向后工作:

private void ClearSearchResults()
{
    for(int i=panel1.Controls.Count-1;i>=0;--i) {
        panel1.Controls.RemoveAt(i);        
        // or
        // Control X = panel1.Controls[i];
        // panel1.Controls.Remove(X);
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,只需使用clear:

panel1.Controls.Clear();
Run Code Online (Sandbox Code Playgroud)


Aus*_*nen 14

这对你有用吗?

private void ClearSearchResults()
{
    panel1.Controls.Clear();
}
Run Code Online (Sandbox Code Playgroud)

编辑强调CKret评论.

  • 需要明确的是:完全删除foreach循环.即不要把panel1.Controls.Clear(); 在foreach循环中. (3认同)

Sta*_* R. 8

我相信你在迭代它的同时从中移除一个项目时正在更改IEnumareble.

尝试使用简单的for循环而不是foreach.