如何将Dispose功能添加到C#UserControl?

时间:2008-10-03 16:04:18

标签: c# user-controls dispose

我有一个实现UserControl的类。在.NET 2005中,在MyClass.Designer.cs部分类文件中自动创建一个Dispose方法,如下所示:

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

如果我想添加自己的Dispose功能,我会把它放在哪里?由于生成了这个文件,我不想在这里添加代码并冒着被吹走的风险。

8 个答案:

答案 0 :(得分:66)

所有Component个类都会实现Disposed个事件。您可以为该事件添加事件处理程序并清理其中的内容。

例如,在您的UserControl中,您可以添加以下方法:

private void OnDispose(object sender, EventArgs e)
{
    // do stuff on dispose
}

在构造函数(或Load事件处理程序)中添加以下行:

Disposed += OnDispose;

答案 1 :(得分:53)

在这种情况下,我将生成的Dispose方法移动到主文件并进行扩展。 Visual Studio尊重这一点。

另一种方法是使用部分方法(C#3.0)。

答案 2 :(得分:7)

我相信在这种情况下,代码生成器会尊重您的代码。把它放在代码隐藏中应该是安全的。

答案 3 :(得分:6)

在VS 2005(和2008)中,您可以更新Dispose方法,当您从设计器编辑控件时,它不会被删除。

答案 4 :(得分:2)

如果需要,可以将其从.designer.cs文件移出到主.cs文件中。如前所述,它不会被覆盖。

答案 5 :(得分:2)

您只需要重载用户控件继承的Component Class中的public void Dispose()方法。

确保您将调用传递给基本方法以及在功能上进行处置,否则您将破坏功能,除非您完全实现它

答案 6 :(得分:0)

我认为最干净的方法是让你的控件订阅自己的Disposed()事件并在那里进行清理。

答案 7 :(得分:-1)

UserControl有一个可用于清理的Unloaded事件,