Form.Dispose()调用控件里面的Dispose()?

时间:2010-09-08 18:57:33

标签: c# .net

创建表单时,自动生成的代码不包含覆盖的Dispose方法。这是否意味着没有为表单中的所有控件调用Dispose?

2 个答案:

答案 0 :(得分:12)

当您在表单上致电Dispose时,会为其Dispose集合中的每个控件调用Controls。这些控件反过来会这样做,所以最后应该调用所有控件'Dispose方法。请注意,这不是基于控件是否存在于设计器中;它基于在调用Controls时表单的Dispose集合中找到的控件实例。

唯一可以看到不会发生这种情况的情况是,如果您自己创建一个容器控件并覆盖Dispose而不将调用传播到基类或迭代所包含的控件并调用{{1在他们身上。

答案 1 :(得分:4)

它应该。您可能需要查看YourForm.designer.cs文件。它看起来像这样:

protected override void Dispose(bool disposing)
{
   if(disposing && (components != null))
   {
      components.Dispose();
   }
   base.Dispose(disposing)
}

base.Dispose();调用将负责清理添加到表单的控件。