我正在构建一个流程布局面板,其每个控件代表一个房间。我想通过删除面板中的所有控件并添加新控件来重新加载所有房间。
我用了:
foreach(Control control in flowLayoutPanel.Controls)
{
flowLayoutPanel.Controls.Remove(control);
control.Dispose();
}
但是某些控件无法删除。
我试图在互联网上找到解决方案,但无处可寻。
任何身体都可以帮忙吗?
我正在构建一个流程布局面板,其每个控件代表一个房间。我想通过删除面板中的所有控件并添加新控件来重新加载所有房间。
我用了:
foreach(Control control in flowLayoutPanel.Controls)
{
flowLayoutPanel.Controls.Remove(control);
control.Dispose();
}
但是某些控件无法删除。
我试图在互联网上找到解决方案,但无处可寻。
任何身体都可以帮忙吗?
根据 MSDN,您可以通过调用方法清除 a ControlCollection
(例如 a FlowLayoutPanel
)中的所有控件。例如:Clear()
flowLayoutPanel1.Controls.Clear();
请注意:仅仅因为从集合中删除项目并不意味着处理程序已经消失,并且必须正确处理,以免您面临内存泄漏。
那是因为您要从您正在迭代的同一个列表中删除控件。尝试这样的事情
List<Control> listControls = flowLayoutPanel.Controls.ToList();
foreach (Control control in listControls)
{
flowLayoutPanel.Controls.Remove(control);
control.Dispose();
}
也许不是那样,但你明白了。将它们列在列表中,然后将其删除。
注意:这是基于先前评论的可行解决方案,因此归功于该人:)
这对我有用:
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();
}
可能有一种更好/更清洁的方法,但它确实有效。
如果您正在寻找简单快捷的解决方案。这里是。
while (flowLayoutPanel.Controls.Count > 0) flowLayoutPanel.Controls.RemoveAt(0);