2010-01-06 59 views
0

如何在UserControl上實現Dispose(boolean)...當VS Designer已經使用DebuggerNonUserCode屬性實現它時?我對這個方法的修改會被刪除嗎?在UserControl上實現Dispose(bool)

(代碼UserControl.Designer.vb)

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

回答

4

你需要從設計文件中刪除Dispose方法並將其添加到您的源文件。
您應該也可能刪除DebuggerNonUserCode屬性。

至少在C#中,設計人員不會自動將Dispose放回到設計器文件中,如果VB設計人員這樣做,我會感到震驚。

+0

aha ... without * DebuggerNonUserCode * ... – serhio 2010-01-06 16:08:49

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

    ... 
} 
2

如果在.Designer.vb文件中對該方法進行了修改,它們將不會被覆蓋。 DebuggerNonUserCode屬性僅僅意味着如果您正在調試該代碼,則不會允許您進入該代碼。它會一直跨越。

相關問題