Как получить событие, когда очищены элементы WinForms TreeView - PullRequest
0 голосов
/ 06 июля 2011

Я использую стандартный TreeView в приложении WinForms, и все работает отлично, за исключением одной проблемы:

Части системы должны меняться в зависимости от выбранного TreeNode, который отлично работает при использовании события AfterSelect.

Однако иногда TreeView полностью очищается, что приводит к пустому выделению, которое не вызывает это событие. В данный момент я вызываю событие обратного вызова вручную, чтобы исправить эту проблему.

Это очевидно опасно, так как я забуду где-нибудь вызвать эту функцию. Есть ли «правильный» способ сделать это?

Спасибо!

1 Ответ

0 голосов
/ 06 июля 2011

Это по замыслу. Исходные собственные элементы управления Windows генерируют уведомления только о вещах, которые вы сами не можете понять. Например, элемент управления ListBox не имеет события, которое сообщит вам, что элемент был добавлен или удален. Это потому, что у пользователя нет возможности добавлять или удалять элементы. Аналогичным образом, пользователь не может удалить узлы из дерева.

Для таких изменений требуется код, который вы пишете. Поскольку это ваш код, вы не можете не знать, что эти изменения произошли. Если вы хотите событие, вам придется поднять его самостоятельно. Помните, что это сложнее, чем кажется, класс TreeNodeCollection не позволяет надежно генерировать событие для программных изменений в коллекции узлов. Он не ведет себя как ObservableCollection. Вам определенно лучше, если вам не нужно это событие.

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