如何在FlowLayoutPanel中正确处置用户控件?
flowlayoutpanel1.Controls.RemoveAt(i)
就足够了吗?
我就是找不到flowlayoutpanel1.Controls
的.Dispose() ...
发布于 2013-10-25 18:34:35
如果希望移除所有控件,可以向后循环访问控件集合,而不是创建副本(见下文)。
我发现这提供了最好的解决方案,特别是如果您打算在以后重新填充它。强制GC收集有助于在有大量控件的情况下控制内存使用。
FlowLayoutPanel.SuspendLayout();
if (FlowLayoutPanel.Controls.Count > 0) {
for (int i = (FlowLayoutPanel.Controls.Count - 1); i >= 0; i--) {
Control c = FlowLayoutPanel.Controls[i];
c.SomeEvent -= SomeEvent_Handler;
c.Dispose();
}
GC.Collect();
}
FlowLayoutPanel.ResumeLayout();
发布于 2011-01-24 00:03:09
是要释放FlowLayoutPanel
中的所有控件,还是全部释放?如果您想要将它们全部清除,只需清除FlowLayoutPanel
即可。释放控件也会释放Controls集合中的所有内容。如果要释放单个控件,请调用该控件dispose方法;FlowLayoutPanel
将自动将其从其Controls集合中移除。
如果你想要处理所有的控件,而不是FlowLayoutPanel
本身,那就有点棘手了。您不能只在Controls集合上进行foreach,然后释放每个控件,因为这会导致Controls集合被修改。相反,您可以将Controls集合复制到单独的列表中,并从该列表中释放它们。
发布于 2015-01-14 21:02:13
当我需要移除controls集合中的所有控件时,YourFlowLayoutPanel.Controls.Clear();
会起作用
https://stackoverflow.com/questions/4774727
复制相似问题