2010-01-06 3 views
0

Как реализовать Dispose (логическое) в UserControl ... когда VS Designer уже реализовал его с атрибутом DebuggerNonUserCode? Удалятся ли мои модификации этого метода?Реализация Dispose (bool) в UserControl

(код из UserControl.Designer.vb)

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

ответ

4

Вы должны удалить метод Dispose из файла конструктора и добавьте его в исходный файл.
Возможно, вы также должны удалить атрибут DebuggerNonUserCode.

По крайней мере, на C# дизайнер не будет автоматически помещать Dispose в файл конструктора, и я был бы потрясен, если бы дизайнер VB сделал это.

+0

aha ... без * DebuggerNonUserCode * ... – serhio

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 просто означает, что если вы отлаживаете этот код, вам не разрешается входить в него. Он всегда будет перешагнуть.

Смежные вопросы