2014-05-20 8 views
7

TreeView를 사용하는 Winform 응용 프로그램이 있습니다. 이 응용 프로그램의 일부 사용자는 노드를 두 번 클릭하여 확장해야하는 문제가 있습니다. 그래서 노드를 확장하기 위해 한 번의 클릭으로이 코드를 추가했습니다.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 

이것은 작동하지만 노드를 클릭하는 것과 관련하여 이상한 동작을 발견했습니다. 나는 행동이 다른 두 곳이 있다는 것을 알았다. 처음에

enter image description here

일반적으로 한 번의 클릭 : 첫 번째 장소로 +/- 심볼과 (그림에서 첫 번째 원) 옆에 도트 2 위는 노드 (두 번째 원)의 텍스트입니다 노드를 확장하기에 충분하고 노드를 확장하려면 두 번 클릭해야합니다. 그런 다음 코드를 사용할 때 두 번째 장소를 한 번 클릭하면 노드를 확장 할 수 있지만 첫 번째 위치를 한 번 클릭하면 노드가 확장되고 축소됩니다.

사용자가 노드를 확장하기 위해 두 번째 장소에서 두 번 더 클릭해야하는 이유는 무엇입니까? 두 곳에서 한 번의 클릭으로 노드를 확장하려면 어떻게해야합니까? 고마워요!

답변

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