Ответ 1
NodeDoubleClick
отлично, но вместо e.Node
используйте this.treeView1.SelectedNode
.
У меня есть обычный элемент управления treeview Windows Forms. Узлы настроены следующим образом:
Группа
--- ребенок
--- ребенок
Если я дважды щелкнул свернутую группу node, она будет расширяться (как и следовало ожидать), и событие NodeMouseDoubleClick запускается, где мой код что-то делает, если выбранный node НЕ является группой node.
Проблема возникает, когда группа расположена рядом с дном древовидной структуры, поэтому, когда я дважды щелкаю по группе node, для этого нужно, чтобы древовидное представление расширялось вертикально, чтобы соответствовать дочерним узлам. В таких случаях, если я дважды щелкнул группу node, к тому времени, когда она расширит и отредактирует древовидную структуру, мой курсор мыши находится над дочерним элементом node (ему пришлось нажимать все), и это приводит к тому, что NodeMouseDoubleClick подумайте, что выбран дочерний элемент node, что вызывает очень странное поведение.
Как я могу обойти это? Должен ли я использовать NodeMouseDoubleClick или...?
Я вижу, что это также объяснялось в отчете о обратной связи Проблема с событием TreeView DoubleClick после разворачивания/сглаживания вызвала изменение прокрутки.
NodeDoubleClick
отлично, но вместо e.Node
используйте this.treeView1.SelectedNode
.
Двойной щелчок на TreeNode является жестом мыши, который уже используется TreeView для свертывания/расширения узлов. Microsoft не подталкивает стандарты пользовательского интерфейса так же сильно, как Apple, и на некотором уровне разочаровывает тот факт, что Microsoft вызывается NodeDoubleClick, потому что они поощряют вас вносить изменения в TreeView с помощью собственного пользовательского поведения. Это может ввести в заблуждение конечных пользователей, которые ожидают общего поведения от обычных элементов управления.
От Проектирование пользовательского интерфейса Бена Шнейдермана, первого из <сильных > восьми золотых правил дизайна интерфейса
- Стремитесь к последовательности.
Последовательные последовательности действий должны быть требуются в подобных ситуациях; следует использовать идентичную терминологию в подсказках, меню и экранах справки; и последовательные команды должны быть занятых повсюду.
Короче говоря, возможно, вы не должны использовать NodeMouseDoubleClick.