14
votes

I have a regular .NET Windows Forms treeview control. The nodes are setup like this:

Group

---child

---child

If I double-click a collapsed Group node, it expands (as you'd expect) and the NodeMouseDoubleClick event is fired off, where my code does something if the selected node is NOT a group node.

The problem arises when the Group is located near the bottom of the treeview, so that when I double-click the Group node it would require the treeview to expand vertically to fit the child nodes into view. In such cases, if I double-click the Group node, by the time it expands and adjusts the treeview, my mouse cursor is over a child node (it had to push everything up), and that causes the NodeMouseDoubleClick to think the child node is selected, which causes very odd behaviour.

How can I get around this? Should I not be using NodeMouseDoubleClick or..?

I see it was also explained in the feedback report Problem with TreeView DoubleClick event after expanding/collapsing caused change of scroll.

2

2 Answers

16
votes

The NodeDoubleClick is fine, but instead of using the e.Node, use this.treeView1.SelectedNode.

7
votes

Double-clicking a TreeNode is a mouse gesture that is already "used" by the TreeView to collapse/expand nodes Microsoft doesn't push the UI standards as much as Apple does, and on some level it is disappointing that Microsoft has exposed NodeDoubleClick, because they are encouraging you to amend the TreeView with your own custom behavior. This can be misleading to end users, who expect common behavior from common controls.

From Designing the User Interface by Ben Shneiderman, the first of Eight Golden Rules of Interface Design:

  1. Strive for consistency.

Consistent sequences of actions should be required in similar situations; identical terminology should be used in prompts, menus, and help screens; and consistent commands should be employed throughout.

Long story short, maybe you should not be using NodeMouseDoubleClick.