如何在FlowLayoutPanel中正确地处理用户控件?正确地从FlowLayoutPanel中删除控件
请问flowlayoutpanel1.Controls.RemoveAt(i)
够了吗?
我只是找不到一个flowlayoutpanel1.Controls
.Dispose()...
如何在FlowLayoutPanel中正确地处理用户控件?正确地从FlowLayoutPanel中删除控件
请问flowlayoutpanel1.Controls.RemoveAt(i)
够了吗?
我只是找不到一个flowlayoutpanel1.Controls
.Dispose()...
你想出售的FlowLayoutPanel
或全部所有的控制?如果你想处置所有这些,只需处理FlowLayoutPanel
。处置控件也会将Controls中的所有内容都放置在Controls集合中。如果您想要处置单个控件,请调用该控件的Dispose方法; FlowLayoutPanel
会自动将其从Controls集合中删除。
如果你想处理所有的控件,但不是FlowLayoutPanel
本身,这有点棘手。您不能仅通过Controls集合进行foreach并处理每个控件,因为这会导致Controls集合被修改。相反,您可以将Controls集合复制到一个单独的列表中并从那里处置它们。
我需要处置一个控件(第一个) – Alex 2011-01-24 00:56:25
没有评论downvote? – 2016-05-27 02:32:38
如果控件有Dispose()
方法,在从面板中删除它之后调用它。
如果您希望删除所有控件,则可以向后遍历控件集合,而不是创建副本(请参见下文)。
我发现这提供了最好的解决方案,特别是如果您打算在之后重新填充它。强制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();
请解释你的代码,或者至少添加注释行。 – Amith 2013-10-25 10:53:23
YourFlowLayoutPanel.Controls.Clear();
工作时,我需要删除控件集合
Windows窗体我承担所有的控制? – 2011-01-23 16:01:36