Joh*_*nny 4 c# flowlayoutpanel
我正在构建一个流程布局面板,其中每个控件代表一个房间.我想通过删除面板中的所有控件并添加新控件来重新加载所有空间.
我用了:
foreach(Control control in flowLayoutPanel.Controls)
{
flowLayoutPanel.Controls.Remove(control);
control.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
但有些控件无法删除.
我试图在互联网上找到解决方案,但无处可寻.
身体有帮助吗?
Yoi*_*zek 11
那是因为您要从正在迭代的同一列表中删除控件.尝试这样的事情
List<Control> listControls = flowLayoutPanel.Controls.ToList();
foreach (Control control in listControls)
{
flowLayoutPanel.Controls.Remove(control);
control.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
也许不是那样,但你明白了.将它们放入列表中,然后将其删除.
根据MSDN,您可以通过调用方法清除ControlCollection(例如a FlowLayoutPanel)中的所有控件.例如:Clear()
flowLayoutPanel1.Controls.Clear();
Run Code Online (Sandbox Code Playgroud)
请注意:仅仅因为从集合中删除项目并不意味着处理程序已经消失,必须妥善处理,减少您面临的内存泄漏.
注意:这是基于先前评论的有效解决方案,因此归功于该人:)
这对我有用:
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();
}
Run Code Online (Sandbox Code Playgroud)
可能有更好/更清洁的方法,但它有效。