Как добавить функцию 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, куда бы я ее поместил? Поскольку этот файл генерируется, я не хочу добавлять код здесь и рисковать его сдувать.
8 ответов:
в таком случае я перееду созданный
Disposeметод к основному файлу и продлить его. Visual Studio уважает это.другой подход будет использовать частичный метод (C# 3.0).
все
Componentклассы реализуют aDisposedсобытие. Вы можете добавить обработчик событий для этого события и убирать вещи туда.например, в вашем
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() и сделал вашу очистку там.
Comments