Реализация Dispose (bool) в пользовательском контроле - PullRequest
0 голосов
/ 06 января 2010

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

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

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

Ответы [ 3 ]

4 голосов
/ 06 января 2010

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

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

2 голосов
/ 07 января 2010

Если вы внесете изменения в этот метод в файле .Designer.vb, они не будут перезаписаны. Атрибут DebuggerNonUserCode просто означает, что если вы отлаживаете этот код, вам не позволят войти в него. Это всегда перешагнет.

1 голос
/ 07 января 2010

Одним из решений будет инкапсуляция любых одноразовых типов, которые вы используете в классах, производных от System.ComponentModel.Component или которые реализуют System.ComponentModel.IComponent.

Затем вы можете добавить их в IContainer, который создается сгенерированным дизайнером кодом, и они будут расположены вместе с другими компонентами.

1007 * Е.Г. *

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

    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...