如何在FlowLayoutPanel中正确处置用户控件?
flowlayoutpanel1.Controls.RemoveAt(i)
是否足够?
我找不到flowlayoutpanel1.Controls
...
答案 0 :(得分:2)
如果要删除所有控件,可以向后遍历控件集合,而不是创建副本(参见下文)。
我发现这提供了最佳解决方案,特别是如果您打算在之后重新填充它。强制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();
答案 1 :(得分:1)
您想要处理FlowLayoutPanel
中的所有控件还是所有控件?如果要丢弃所有这些,只需处置FlowLayoutPanel
即可。处置控件也会将所有内容都放在Controls集合中。如果要处理单个控件,请调用该控件的Dispose方法; FlowLayoutPanel
会自动将其从Controls集合中删除。
如果要处理所有控件,而不是FlowLayoutPanel
本身,则有点棘手。您不能仅仅通过控件集合进行操作并处理每个控件,因为这会导致控件集合被修改。相反,您可以将Controls集合复制到单独的列表中并从那里处理它们。
答案 2 :(得分:1)
YourFlowLayoutPanel.Controls.Clear();
我需要删除控件集合中的所有控件时工作
答案 3 :(得分:0)
如果控件具有Dispose()
方法,只需在从面板中删除它后调用它。