2011-01-24 15 views
18

Estoy intentando mostrar un menú emergente en mi vista de árbol cuando los usuarios hacen clic derecho, permitiéndoles elegir acciones contextuales para aplicarlas al nodo seleccionado.Haga clic con el botón derecho en seleccionar en .Net TreeNode

Por el momento, el usuario tiene que hacer clic en el nodo izquierdo y luego hacer clic con el botón derecho para elegir.

¿Es posible hacer clic con el botón derecho en un nodo? Seleccione ese nodo y, de ser así, ¿cuál es el mejor método para hacerlo?

Respuesta

39

dos clics izquierdo y derecho disparar un evento de clic y hacer que la selección cambie. Sin embargo, en determinadas circunstancias (que aún no me he molestado en rastrear), la selección cambiará del nodo al que se hizo clic con el botón derecho en el nodo seleccionado originalmente.

Con el fin de asegurarse de que el botón derecho del ratón cambia la selección, se puede cambiar por la fuerza el nodo seleccionado mediante el uso de la MouseDown evento:

treeView.MouseDown += (sender, args) => 
    treeView.SelectedNode = treeView.GetNodeAt(args.X, args.Y); 

Un poco mejor, como uno de los otros carteles señalado, es usar el evento NodeMouseClick:

treeView.NodeMouseClick += (sender, args) => treeView.SelectedNode = args.Node; 
+4

Estoy de acuerdo. Simplemente agregando este código al constructor de mi Formulario fue el truco para mí. Gracias. –

+0

Un problema que tuve con el enfoque NodeMouseClick es que cambia el nodo seleccionado al final del evento NodeMouseClick. Entonces, para mis propósitos, quería que el nodo seleccionado cambiara antes de que se mostrara el menú contextual. Para hacer eso, tuve que usar el enfoque MouseDown. – cigarman

+0

Sí Coleman. Agrego validación: if (e.Button == MouseButtons.Right) ... (menos cargo) – harveyt

15

sí. Aquí está procesando para NodeMouseClick evento:

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
{ 
     treeView1.SelectedNode = e.Node; 
} 
3

Arrastre una tira menú contextual en el formulario a continuación:

private void treeView1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
    { 
     // Display context menu for eg: 
     ContextMenu1.Show(); 
    } 
} 
Cuestiones relacionadas