Двойное нажатие TreeView в .NET/С#

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

Группа

--- ребенок

--- ребенок

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

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

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

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

Ответы

Ответ 1

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

Ответ 2

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

От Проектирование пользовательского интерфейса Бена Шнейдермана, первого из <сильных > восьми золотых правил дизайна интерфейса

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

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

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