删除C#中flowlayoutpanel中的所有控件

时间:2012-10-01 03:47:07

标签: c# flowlayoutpanel

我正在构建一个流程布局面板,其中每个控件代表一个房间。我想通过删除面板中的所有控件并添加新控件来重新加载所有空间。

我用过:

foreach(Control control in flowLayoutPanel.Controls) 
{
    flowLayoutPanel.Controls.Remove(control);
    control.Dispose(); 
}

但有些控件无法移除。

我试图在互联网上找到一个解决方案,但却找不到。

身体可以帮忙吗?

4 个答案:

答案 0 :(得分:11)

那是因为您要从正在迭代的同一列表中删除控件。试试这样的事情

List<Control> listControls = flowLayoutPanel.Controls.ToList();

foreach (Control control in listControls)
{
    flowLayoutPanel.Controls.Remove(control);
    control.Dispose();
}

也许不是那样,但你明白了。将它们放入列表中,然后将其删除。

答案 1 :(得分:7)

According to MSDN, you can clear all controls from a vce (such as a ControlCollection) by calling the Clear() method. For example:

FlowLayoutPanel

Be aware: just because the items are removed from the collections does not mean the handlers are gone and must be disposed of properly less you face memory leaks.

答案 2 :(得分:3)

注意:这是一个基于之前评论的工作解决方案,因此对该人的信用:)

这对我有用:

List<Control> listControls = new List<Control>();

foreach (Control control in flowLayoutPanel1.Controls)
{
     listControls.Add(control);
}

foreach (Control control in listControls)
{
     flowLayoutPanel1.Controls.Remove(control);
     control.Dispose();
}

可能有更好/更清洁的方法,但它确实有效。

答案 3 :(得分:0)

如果您正在寻找一种简单快捷的解决方案。在这里。

while (flowLayoutPanel.Controls.Count > 0) flowLayoutPanel.Controls.RemoveAt(0);