C # TreeView.GetNodeAt () problema con le immagini cliccando
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. :)
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