2014-05-20 164 views
7

我有一個Winform應用程序,我正在使用TreeView。這個應用程序的一些用戶有一個問題,他們必須雙擊節點才能展開它。所以我添加了這個代碼來使用單擊來展開節點: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 

這可行,但我注意到有關點擊節點的奇怪行爲。我注意到有2個地方有不同的行爲。第一個位置是與+/-符號和它旁邊(圖中第一圓)的點,第二位的是節點(第二圓)的文本:

enter image description here

在第一位置通常單一的點擊足以展開節點並且必須在第二個地方完成雙擊以展開節點。然後,當我使用我的代碼時,單擊第二個位置就足以展開節點,但是當我單擊第一個位置時,節點將展開並摺疊。

爲什麼用戶必須在第二個位置點擊兩次才能展開節點?我能做些什麼來在兩個地方單擊來擴展節點?感謝你們!

回答

6

加號/減號仍然被認爲是節點的一部分 - 當用戶點擊它時,代碼切換擴展,但框架繼續並執行相同的操作。

添加到您的代碼不是在正/負作用:

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

我的計劃是要檢查x,y座標並計算座標是否屬於+/-或節點文本。我不知道HitTest方法和TreeViewHitTestLocations。謝謝! – DanielH