2014-05-20 11 views
7

Ho un'applicazione Winform dove sto usando TreeView. Alcuni utenti di questa applicazione hanno un problema che devono fare doppio clic su un nodo per espanderlo. Così ho aggiunto questo codice da utilizzare solo clic per espandere i nodi:Comportamento di clic sul nodo Treeview

Private Sub MyTreeView_NodeMouseClick(sender As System.Object, 
    e As System.Windows.Forms.TreeNodeMouseClickEventArgs) Handles MyTreeView.NodeMouseClick 

    If e.Node.IsExpanded Then 
     e.Node.Collapse() 
    Else 
     e.Node.Expand() 
    End If 

End Sub 

Questo funziona, ma ho notato un comportamento strano per quanto riguarda clic su un nodo. Ho notato che ci sono 2 posti con un comportamento diverso. Il primo posto è con +/- simbolo e puntini accanto ad essa (primo cerchio nella foto), il secondo posto è un testo del nodo (secondo cerchio):

enter image description here

Normalmente semplice clic sul primo posto è sufficiente espandere il nodo e fare doppio clic sul secondo posto per espandere il nodo. Quindi, quando uso il mio codice, basta un clic sul secondo posto per espandere il nodo, ma quando faccio clic singolo sul primo punto, il nodo viene espanso e collassato.

Perché l'utente deve eseguire altri due clic sul secondo posto per espandere il nodo? Cosa posso fare per espandere i nodi con un solo clic su entrambi i posti? Grazie ragazzi!

risposta

6

Il più/meno è ancora considerato parte del nodo e quando l'utente fa clic su di esso, il codice attiva o disattiva l'espansione ma il framework continua e fa lo stesso.

Aggiungi al codice di non agire sul più/meno:

private static void TreeView_OnNodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
{ 
    var hitTest = e.Node.TreeView.HitTest(e.Location); 
    if (hitTest.Location == TreeViewHitTestLocations.PlusMinus) 
     return; 

    if (e.Node.IsExpanded) 
     e.Node.Collapse(); 
    else 
     e.Node.Expand(); 
} 
+0

Il mio piano era quello di verificare coordinate X, Y e calcolare se le coordinate appartengono alla +/- o al testo del nodo. Non conoscevo il metodo HitTest e TreeViewHitTestLocations. Grazie! – DanielH

Problemi correlati