2010-01-06 58 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属性仅仅意味着如果您正在调试该代码,则不会允许您进入该代码。它会一直跨越。

相关问题