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

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

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

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

В этом случае я перемещаю сгенерированный метод Dispose в основной файл и расширяю его. Visual Studio уважает это.

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

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

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

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

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

 Disposed += OnDispose; 

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

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

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

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

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

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

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