有办法做到这一点吗?
答案 0 :(得分:30)
Panel和Form类都有一个Controls集合属性,它有一个Clear()方法......
MyPanel.Controls.Clear();
或
MyForm.Controls.Clear();
但是Clear()
并没有调用dispose()
(它所做的就是从集合中移除他的控制权),所以你需要做的是
List<Control> ctrls = new List<Control>(MyPanel.Controls);
MyPanel.Controls.Clear();
foreach(Control c in ctrls )
c.Dispose();
你需要创建一个单独的引用列表,因为Dispose也会从集合中删除控件,更改索引并弄乱foreach ......
答案 1 :(得分:3)
我不相信有一种方法可以同时做到这一点。您可以遍历子控件并一次调用一个dispose方法:
foreach(var control in this.Controls)
{
control.Dispose();
}
答案 2 :(得分:2)
你没有详细说明原因。
这发生在表单的Dispose重写方法中(在form.designer.cs中)。它看起来像这样:
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
答案 3 :(得分:0)
如果这是ASP.Net或Winforms,你没有分享。如果是后者,您可以通过首先在面板上调用SuspendLayout()
来做得很好。然后,完成后,请致电ResumeLayout()
。