TreeView поведение двойного щелчка в .NET / C # - PullRequest
14 голосов
/ 23 января 2009

У меня есть обычный .NET Windows Forms древовидный элемент управления. Узлы настроены так:

* Группа 1005 *

--- ребенок

--- ребенок

Если я дважды щелкну свернутый узел группы, он развернется (как и следовало ожидать), и событие NodeMouseDoubleClick будет запущено, где мой код что-то делает, если выбранный узел НЕ является узлом группы.

Проблема возникает, когда группа расположена в нижней части древовидной структуры, поэтому при двойном щелчке узла группы требуется, чтобы древовидная структура расширялась по вертикали, чтобы соответствовать дочерним узлам. В таких случаях, если я дважды щелкаю узел Group, к тому времени, когда он расширяется и настраивает древовидную структуру, мой курсор мыши находится над дочерним узлом (он должен был подтолкнуть все вверх), и это заставляет NodeMouseDoubleClick думать о дочернем узле выбран, что вызывает очень странное поведение.

Как я могу обойти это? Я не должен использовать NodeMouseDoubleClick или ..?

Я вижу, это было также объяснено в отчете обратной связи Проблема с событием TreeView DoubleClick после развертывания / свертывания привела к изменению прокрутки .

Ответы [ 2 ]

15 голосов
/ 23 января 2009

NodeDoubleClick в порядке, но вместо e.Node используйте this.treeView1.SelectedNode.

7 голосов
/ 25 января 2009

Двойной щелчок на TreeNode - это жест мыши, который уже используется «TreeView» для свертывания / расширения узлов. Microsoft не продвигает стандарты пользовательского интерфейса так сильно, как Apple, и на каком-то уровне разочаровывает то, что Microsoft имеет подвергается NodeDoubleClick, потому что они побуждают вас вносить изменения в TreeView с вашим собственным поведением. Это может вводить в заблуждение конечных пользователей, которые ожидают обычного поведения от общих элементов управления.

С Проектирование интерфейса пользователя от Бен Шнейдерман , первый из Восемь золотых правил проектирования интерфейса :

  1. Стремиться к последовательности.

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

Короче говоря, возможно, вам не следует использовать NodeMouseDoubleClick.

...