如何在UserControl上实现Dispose(boolean)...当VS Designer已经使用 DebuggerNonUserCode 属性实现它时?我对这种方法的修改会被删除吗?
(来自UserControl.Designer.vb的代码)
<System.Diagnostics.DebuggerNonUserCode()> _
Protected Overrides Sub Dispose(ByVal disposing As Boolean)
答案 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.
}
...
}