Encuentro que el comportamiento de selección de comportamiento estándar de windows tree es bastante molesto. Por ejemplo, si está utilizando Explorer y hace clic derecho en un nodo y pulsa Propiedades, resalta el nodo y muestra el diálogo de propiedades para el nodo en el que hizo clic. Pero cuando regresa del diálogo, el nodo resaltado era el nodo previamente seleccionado/resaltado antes de hacer clic con el botón derecho. Encuentro que esto causa problemas de usabilidad porque siempre estoy confundido sobre si actué en el nodo correcto.
Así que en muchas de nuestras GUI, cambiamos el nodo de árbol seleccionado haciendo clic con el botón derecho para que no haya confusión. Puede que no sea lo mismo que una aplicación iwndos estándar como Explorer (y tiendo a modelar fuertemente nuestro comportamiento de GUI después de las aplicaciones de ventana estándar por razones de usabilidad), creo que este caso de excepción da como resultado árboles mucho más utilizables.
Aquí hay un código que cambia la selección en el botón derecho del ratón:
private void tree_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
// only need to change selected note during right-click - otherwise tree does
// fine by itself
if (e.Button == MouseButtons.Right)
{
Point pt = new Point(e.X, e.Y);
tree.PointToClient(pt);
TreeNode Node = tree.GetNodeAt(pt);
if (Node != null)
{
if (Node.Bounds.Contains(pt))
{
tree.SelectedNode = Node;
ResetContextMenu();
contextMenuTree.Show(tree, pt);
}
}
}
}
Muchas gracias, tengo una pequeña adición a la solución: También podría usar el evento "_NodeMouseClick" que le da un "TreeNodeMouseClickEventArgs e", en cuyo caso puede usar el e.Node y no tiene molestarse en verificar si el nodo es nulo o no. – SDM
Obtuve el resultado deseado con el evento MouseDown en lugar de MouseUp. – Javier