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

时间:2020-03-06 15:05:01  来源:igfitidea点击:

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

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

如果要添加自己的Dispose功能,我应该放在哪里?由于此文件已生成,因此我不想在此处添加代码,否则有被吹走的风险。

解决方案

我相信在这种情况下,代码生成器会尊重代码。将其放在后面的代码中应该是安全的。

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

如果需要,可以将其从.designer.cs文件移出,然后移入主.cs文件。正如已经说过的那样,它不会被覆盖。

在这种情况下,我将生成的" Dispose"方法移至主文件并对其进行扩展。 Visual Studio对此表示尊重。

另一种方法是使用部分方法(C3.0)。

所有Component类均实现Disposed事件。我们可以为该事件添加事件处理程序,然后在其中清除内容。

例如,在UserControl中,我们可以添加以下方法:

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

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

Disposed += OnDispose;

我们只需要重载用户控件继承的Component Class中的公共void Dispose()方法。

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