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

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 に答える