Как узнать, когда UserControl больше не используется (нет события Close) - PullRequest
2 голосов
/ 31 августа 2011

Я использую UserControl s внутри WinForm для отображения данных.Я также использую шаблон команды, чтобы UserControl регистрировал (слабое) событие и выполнял какие-то действия при запуске команды.

На WinForm я могу отменить регистрацию событий в Closeсобытие.Однако такого события на UserControl нет.Я подключил события, которые, как я думал, будут запущены, когда UserControl больше не будет в стеке дисплея, но не смог найти ничего полезного.Чтобы пройти, я проверяю, является ли Parent нулевым, и это работало для большинства случаев.

Теперь я хотел бы иметь ребенка UserControl от другого UserControl (поместите UserControlвнутри TabControl) и свойство Parent больше не будет нулевым для дочернего элемента управления, когда родительский элемент больше не отображается.

Есть ли способ узнать, является ли UserControlиспользуется?

Что я пробовал до сих пор: Dispose() не вызывается системой сразу, поэтому она бесполезна;IsVisible также не обновляется системой;событие Close или Unload не инициировано.

Приветствия.

Ответы [ 3 ]

3 голосов
/ 31 августа 2011

В элементе управления есть событие HandleDestroyed, которое может работать для вас.

1 голос
/ 31 августа 2011

Это действительно метод Dispose ().Если он вызывается недостаточно рано, в коде, использующем элемент управления, есть ошибка.Например, используя Controls.Clear () или Controls.Remove ().

Родитель элемента управления всегда выполняет итерацию своей коллекции Controls и удаляет дочерние элементы управления при его удалении.Что делает удаление автоматически, начиная с Dispose () формы, которая выполняется, когда форма закрыта.Однако не автоматически, когда вы удаляете элементы управления самостоятельно.

0 голосов
/ 12 сентября 2013

Раньше я решал эту проблему, получая родительскую форму (используя Control.ParentForm), а затем напрямую подключаясь к событию FormClosing.

Сложная задача - знать, когда вызывать ParentForm. Не устанавливается при первом создании пользовательского элемента управления. Иногда я перезаписываю обработчик OnLayout и наблюдаю, пока ParentForm не станет нулевым.

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