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、的主要内容,如果未能解决你的问题,请参考以下文章