Если вы говорите о WinForms, я обычно использую один из двух подходов для решения этой проблемы.
Подход 1
Откройте файл Form.Designer.cs. Внутри сгенерированного метода dispose я добавляю вызов DisposeCore. Затем я возвращаюсь в Form.cs и добавляю метод DisposeCore, который теперь будет вызываться во время удаления. Я добавляю всю мою логику утилизации в этот метод.
Редактирование файла конструктора технически не поддерживается. Однако я обнаружил, что это конкретное редактирование не будет смыто, когда дизайнер регенерирует код.
Подход 2
Добавьте обработчик событий в Form.Disposed и сделайте мою логику удаления в обработчике. Это предпочтительный способ, потому что это поддерживаемая операция, и на нее не повлияет какое-то поколение дизайнеров, с которым вам еще предстоит столкнуться.