Pregunta

Estoy usando el evento click en el TreeView para hacer algunas cosas cuando un nodo se hace clic en el TreeView. Lo hago por conseguir el nodo que se haga clic en llamando GetNodeAt () con las coordenadas del ratón, así:

private void TreeView_Click(object sender, System.EventArgs e)
{
    MouseEventArgs mouseEventArgs = e as MouseEventArgs;

    if (mouseEventArgs == null)
        return;

    // Get the node that is being clicked.                  
    TreeNode node = this.GetNodeAt(mouseEventArgs.X, mouseEventArgs.Y);

    // Do other stuff...
}

Sin embargo, el método GetNodeAt () sólo funciona cuando el clic es en la etiqueta de nodo, cuando la imagen nodo se hace clic a continuación GetNodeAt () devuelve un valor nulo. Esto es un poco molesto ya que el nodo se selecciona realmente cuando se hace clic en la imagen, pero no puedo averiguar qué nodo es.

Hacer Alguien tiene alguna sugerencia?

Actualizado: He recibido algunas sugerencias para utilizar SelectedNode lugar. No puedo ya que se establece después de que el evento Click se dispara. En realidad, esto en un control TreeView que hereda y lo que hace es disparar su propio evento Seguido pero con los datos subyacentes que el TreeNode representa en lugar de la propia TreeNode.

Actualización: Resulta que alguien había anulado el método GetNodeAt () en nuestro código que introdujo este comportamiento, que no me di cuenta. Así que la pregunta es nula y no hay ningún problema con el método GetNodeAt (). ¿Por qué alguien haría esto sigue siendo un misterio. :)

¿Fue útil?

Solución

¿Has probado los Eventos BeforeSelect o AfterSelect? Usted puede obtener el nodo seleccionado directamente de los TreeViewCancelEventArgs, a continuación, utilizarlo en su evento Click.

Editar: El pensamiento adicional:. El único problema que veo con esto es que el evento se dispara BeforeSelect realidad después Haga clic en el clic de ratón y Eventos

Otra edición:. Si necesita un evento que se activa antes de clic, puede utilizar NodeMouseClick - TreeNodeMouseClickEventArgs tiene una propiedad de nodo

Otros consejos

¿Por qué no usar simplemente TreeView.SelectedNode?

Probar:

TreeNode node = this.SelectedNode;

EDIT: Golpeado por la mano de Sean

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top