C# Forms - 从 Buttons、PictureBoxes、

Posted

技术标签:

【中文标题】C# Forms - 从 Buttons、PictureBoxes、【英文标题】:C# Forms - Clearing the form from Buttons, PictureBoxes, 【发布时间】:2012-04-29 21:28:18 【问题描述】:

这就是问题所在: 我添加了很多按钮、图片框、文本框和其他控件,如下所示:

btnStart = new Button();bla bla bla text text text...

而且我一直在添加更多内容。所以,我知道我可以一个一个地删除它们:

Controls.Remove(btnStart);

但我确实想知道的是,如果有办法一次删除所有这些,而不是在我想删除它们时指定它们中的每一个。基本上我想创建新的:

private void ClrScr()  //Help??? 

一旦从此表单调用,它将删除所有控件(一切都在一个表单中完成)。 任何人都可以帮忙吗?在这方面我还是很陌生。

【问题讨论】:

【参考方案1】:

Controls.Clear( ) 应该这样做。

编辑:

如下所述 - Controls.Clear( ) 可能导致内存泄漏。看看这个答案:How to Clear() controls without causing a memory leak

【讨论】:

确实如此,非常感谢。 @AntonioTehSumtin:请查看 WouterHs 答案中的 cmets。你不应该错过! 我考虑了所有的答案。别担心:)【参考方案2】:

如果您想删除主窗体的所有子控件,只需使用Controls.Clear()

如果您不想删除一些固定控件,则将动态生成的控件添加到面板中。然后您可以调用mypanel.Controls.Clear() 仅删除这些控件。

编辑:似乎 Controls.Clear 会导致内存泄漏,因此您可以使用 Hans Passant 的 this answer。

【讨论】:

不确定,但我认为它只会删除它们,但不会处理它们。这不是关于内存泄漏的危险吗? 如果您从控件容器中删除 Control 对象,则不再有对这些控件的引用(假设您自己没有在其他地方持有引用)。所以垃圾收集器会负责处理这些对象。 在大多数情况下是的,但是如果您在某处有参考,那么您很快就会遇到麻烦。该文档有一个明确的警告:Calling the Clear method does not remove control handles from memory. You must explicitly call the Dispose method to avoid memory leaks. MSDN 警告 ControlCollection.Clear() 不会从内存中删除句柄。它确实会导致泄漏。 msdn.microsoft.com/en-us/library/…

以上是关于C# Forms - 从 Buttons、PictureBoxes、的主要内容,如果未能解决你的问题,请参考以下文章

将按钮与没有 ListView 间隔的 Xamarin.Forms 网格底部对齐

PICT安装及使用步骤

在 C# Forms 应用程序中包含 .dll 文件

pict总结

在 C# 中从数组中引用对象的组件

PICT使用总结