0

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

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

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

3 回答 3

5

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

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

于 2010-01-06T16:06:44.053 回答
2

如果您在 .Designer.vb 文件中对该方法进行修改,它们将不会被覆盖。DebuggerNonUserCode 属性仅表示如果您正在调试该代码,则不允许您单步执行。它总会越过。

于 2010-01-06T21:10:30.000 回答
1

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

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

例如

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.
    }

    ...
}
于 2010-01-06T21:06:20.657 回答