繁体   English   中英

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

[英]How can I use a foreach loop to delete all of the control in a panel?

这是我的代码:

private void ClearSearchResults()
    {
        foreach (Control X in panel1.Controls)
        {
            panel1.Controls.Remove(X);
        }
    }

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

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

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

通常,在迭代从中生成的枚举时,您无法从集合中删除。 而不是使用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);
    }
}

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

panel1.Controls.Clear();

这对你有用吗?

private void ClearSearchResults()
{
    panel1.Controls.Clear();
}

编辑强调CKret评论。

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

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

首先,您不应该在foreach循环中编辑IEnumerable集合。 你应该使用for循环或一段时间。

private void ClearSearchResults()
    {
        while (panel1.Controls.Count > 0)
        {
            panel1.Controls.RemoveAt(0);
        }
    }

或者只是使用:

 panel1.Controls.Clear();

也许这个:

panel1.Controls.Clear()

由于我不知道您使用的面板类型,通常可以调用panel1.Controls.Clear

  private void ClearSearchResults()
        {
            foreach (Control X in panel1.Controls)
            {
                panel1.Controls.Remove(X);
            }
            if (panel1.Controls.Count > 0)
            { 
                ClearSearchResults();
            }
        }

实际上你不能使用Remove因为它打破了迭代器这么简单的解决方案就是这样的:

var controls = in c from panel1.Controls select c;
foreach(Controls _control in controls)
{
   panel1.Controls.Remove(_control);
}

但是你当然不想坚持Loop然后继续使用panel1.Controls.Clear()

            int n;
            n = panel1.Controls.Count-1;

            for (int i = 0; i <= n; i++ )
            {
                Control c = panel1.Controls[0];
                panel1.Controls.Remove(c);
            }
while (panel1.Controls.Count != 0)
{
    foreach (Control c in panel1.Controls)
    {
        panel1.Controls.Remove(c);
    }
}

其他方式 !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM