TreeView double-click behaviour in .NET / C#

23,342

Solution 1

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

Solution 2

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.

Share:
23,342
Ivan
Author by

Ivan

Updated on July 09, 2022

Comments

  • Ivan
    Ivan almost 2 years

    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.

  • argyle
    argyle about 11 years
    It makes sense if the node has no children, to do something with the content that the node represents. That seems consistent, or at least logical. I am doing this when the nodes with children represent directories and the nodes without content represent files. Double clicking a file node causes the file to open.