Domanda

Sto usando l'evento click sul TreeView per fare alcune cose quando un nodo si fa clic nel controllo TreeView. Faccio questo ottenendo il nodo che è cliccare sul chiamando GetNodeAt () con le coordinate del mouse, in questo modo:

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

Tuttavia, il metodo GetNodeAt () funziona solo quando il click è sull'etichetta del nodo, quando l'immagine del nodo si fa clic quindi GetNodeAt () restituisce null. Questo è un po 'fastidioso perché il nodo è in realtà selezionato quando si fa clic sull'immagine, ma non riesco a trovare che cosa nodo è.

Fare Qualcuno ha qualche suggerimento?

Aggiornamento: Ho ottenuto alcuni suggerimenti per utilizzare al posto SelectedNode. Non posso visto che è impostato dopo l'evento Click viene generato. Questo in realtà in un controllo che eredita TreeView e ciò che non è il fuoco è proprio evento Clicked ma con i dati sottostanti che il TreeNode rappresenta invece del TreeNode stesso.

Aggiornamento: Si scopre che qualcuno aveva ignorato il metodo GetNodeAt () nel nostro codice, che ha introdotto questo comportamento, che non ho capito. Quindi la domanda è nullo e non c'è nessun problema con il metodo GetNodeAt (). Perché qualcuno dovrebbe fare questo rimane un mistero. :)

È stato utile?

Soluzione

Hai provato i BeforeSelect o AfterSelect Eventi? È possibile ottenere il nodo selezionato direttamente dalle TreeViewCancelEventArgs, quindi utilizzare nel vostro evento click.

Modifica: Pensiero aggiuntive:. L'unico problema che posso vedere con questo è che l'evento BeforeSelect realtà spara dopo Click e MouseClick Eventi

Un altro Edit:. Se avete bisogno di un evento che gli incendi prima di cliccare, è possibile utilizzare NodeMouseClick - TreeNodeMouseClickEventArgs ha una proprietà Nodo

Altri suggerimenti

Perché non usare TreeView.SelectedNode?

Prova:

TreeNode node = this.SelectedNode;

EDIT: Battuto al punzone da Sean

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top