Как добавить функцию Dispose в C# UserControl?



У меня есть класс, который реализует UserControl. В .NET 2005 метод Dispose автоматически создается в MyClass.Дизайнер.CS частичный файл класса, который выглядит так:



  protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}


Если я хочу добавить свою собственную функциональность Dispose, куда бы я ее поместил? Поскольку этот файл генерируется, я не хочу добавлять код здесь и рисковать его сдувать.

478   8  

8 ответов:

в таком случае я перееду созданный Dispose метод к основному файлу и продлить его. Visual Studio уважает это.

другой подход будет использовать частичный метод (C# 3.0).

все Component классы реализуют a Disposed событие. Вы можете добавить обработчик событий для этого события и убирать вещи туда.

например, в вашем UserControl вы можете добавить следующий метод:

private void OnDispose(object sender, EventArgs e)
{
    // do stuff on dispose
}

и в конструкторе (или в Load обработчик событий) добавьте следующую строку:

Disposed += OnDispose;

Я считаю, что в этом случае генератор кода чтит ваш код. Это должно быть безопасно, чтобы положить его в codebehind.

в VS 2005 (и 2008) Вы можете обновить Dispose метод и он не будет удален при редактировании управления из конструктора.

вы можете переместить его из .дизайнер.cs-файл и в основной .cs файл, если вы хотите. Как уже было сказано, он не будет перезаписан.

вам просто нужно перегрузить метод public void Dispose () в классе компонентов, который наследует пользовательский элемент управления.

убедитесь, что вы передаете вызов базовому методу, а также выполняете свой dispose функционально, или вы нарушите функциональность, Если вы полностью не реализуете его

Я бы подумал, что самым чистым способом было бы, чтобы Ваш контроль подписался на свое собственное событие Disposed() и сделал вашу очистку там.

существует выгруженное событие для UserControl, которое можно использовать для очистки,

Comments

    Ничего не найдено.