首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从FlowLayoutPanel中正确删除控件

从FlowLayoutPanel中正确删除控件
EN

Stack Overflow用户
提问于 2011-01-23 23:57:57
回答 4查看 6.4K关注 0票数 3

如何在FlowLayoutPanel中正确处置用户控件?

flowlayoutpanel1.Controls.RemoveAt(i)就足够了吗?

我就是找不到flowlayoutpanel1.Controls的.Dispose() ...

EN

回答 4

Stack Overflow用户

发布于 2013-10-25 18:34:35

如果希望移除所有控件,可以向后循环访问控件集合,而不是创建副本(见下文)。

我发现这提供了最好的解决方案,特别是如果您打算在以后重新填充它。强制GC收集有助于在有大量控件的情况下控制内存使用。

代码语言:javascript
运行
复制
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();
票数 2
EN

Stack Overflow用户

发布于 2011-01-24 00:03:09

是要释放FlowLayoutPanel中的所有控件,还是全部释放?如果您想要将它们全部清除,只需清除FlowLayoutPanel即可。释放控件也会释放Controls集合中的所有内容。如果要释放单个控件,请调用该控件dispose方法;FlowLayoutPanel将自动将其从其Controls集合中移除。

如果你想要处理所有的控件,而不是FlowLayoutPanel本身,那就有点棘手了。您不能只在Controls集合上进行foreach,然后释放每个控件,因为这会导致Controls集合被修改。相反,您可以将Controls集合复制到单独的列表中,并从该列表中释放它们。

票数 1
EN

Stack Overflow用户

发布于 2015-01-14 21:02:13

当我需要移除controls集合中的所有控件时,YourFlowLayoutPanel.Controls.Clear();会起作用

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4774727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档