在UserControl上实现Dispose(bool)

时间:2010-01-06 16:04:18

标签: .net user-controls dispose visual-studio-designer

如何在UserControl上实现Dispose(boolean)...当VS Designer已经使用 DebuggerNonUserCode 属性实现它时?我对这种方法的修改会被删除吗?

(来自UserControl.Designer.vb的代码)

<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)

3 个答案:

答案 0 :(得分:4)

您需要从设计器文件中删除Dispose方法并将其添加到源文件中 您可能还应删除DebuggerNonUserCode属性。

至少在C#中,设计人员不会自动将Dispose放回到设计器文件中,如果VB设计师这样做,我会感到震惊。

答案 1 :(得分:2)

如果在.Designer.vb文件中对该方法进行了修改,则不会覆盖它们。 DebuggerNonUserCode属性只是意味着如果您正在调试该代码,则不允许您进入该代码。它总会一步一步。

答案 2 :(得分:1)

一种解决方案是封装您在System.ComponentModel.Component派生的类或实现System.ComponentModel.IComponent的类中使用的任何一次性类型。

然后,您可以将它们添加到由设计器生成的代码实例化的IContainer中,它们将与其他组件一起处理。

E.g。

class MyDisposableComponent : IComponent
{
    ... implementation
}

class MyUserControl : UserControl
{
    MyDisposableComponent myDisposableComponent;

    ...

    void SomeMethod()
    {
        myDisposableComponent = new MyDisposableComponent();
        components.Add(myDisposableComponent);
        // myDisposableComponent will be disposed automatically when the
        // IContainer components is disposed by the designer-generated
        // Dispose implementation.
    }

    ...
}