Question

J'utilise l'événement, cliquez sur le TreeView de faire des choses quand un nœud est cliqué dans l'arborescence. Je le fais en obtenant le nœud qui est cliquez sur en appelant GetNodeAt () avec les coordonnées de la souris, comme ceci:

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...
}

Cependant, la méthode GetNodeAt () ne fonctionne que lorsque le clic sur l'étiquette du noeud, lorsque l'image de noeud est cliqué alors GetNodeAt () renvoie NULL. Ceci est un peu gênant puisque le noeud est effectivement sélectionné lorsque l'image est cliqué, mais je ne peux pas savoir quel nœud il est.

Avez-ce que quelqu'un a des suggestions?

Mise à jour: J'ai reçu quelques suggestions pour utiliser selectedNode à la place. Je ne peux pas car il est défini après l'événement Click est déclenché. Cela en fait dans un contrôle qui hérite TreeView et ce qu'il fait est le feu de son propre événement clicked mais avec les données sous-jacentes que le TreeNode représente au lieu de TreeNode lui-même.

Mise à jour: Il s'avère que quelqu'un avait la méthode substituée GetNodeAt () dans notre code qui a introduit ce comportement, que je ne savais pas. La question est donc nulle et non avenue et il n'y a pas de problème avec la méthode GetNodeAt (). Pourquoi quelqu'un ferait cela reste un mystère. :)

Était-ce utile?

La solution

Avez-vous essayé les événements BeforeSelect ou AfterSelect? Vous pouvez obtenir le droit des TreeViewCancelEventArgs nœud sélectionné, puis utilisez dans votre événement Click.

Edit: Pensée supplémentaire. Le seul problème que je peux voir ce que l'événement se déclenche en fait BeforeSelect après Cliquez et événements mouseClick

Une autre Edit:. Si vous avez besoin d'un événement qui se déclenche avant le clic, vous pouvez utiliser NodeMouseClick - TreeNodeMouseClickEventArgs possède une propriété de noeud

Autres conseils

Pourquoi ne pas simplement utiliser TreeView.SelectedNode?

Essayez:

TreeNode node = this.SelectedNode;

EDIT: Battu au poinçon par Sean

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top