繁体   English   中英

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

[英]How do I add Dispose functionality to a C# UserControl?

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

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

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

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

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

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

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

Disposed += OnDispose;

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM