我正在构建一个流程布局面板,其中每个控件代表一个房间。我想通过删除面板中的所有控件并添加新控件来重新加载所有空间。
我用过:
foreach(Control control in flowLayoutPanel.Controls)
{
flowLayoutPanel.Controls.Remove(control);
control.Dispose();
}
但有些控件无法移除。
我试图在互联网上找到一个解决方案,但却找不到。
身体可以帮忙吗?
答案 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);