2011-01-24 3 views
18

사용자가 마우스 오른쪽 버튼을 클릭했을 때 treeview에 팝업 메뉴를 표시하려고합니다. 선택한 노드에 적용 할 상황에 맞는 조치를 선택할 수 있습니다..Net TreeNode를 마우스 오른쪽 버튼으로 클릭하십시오.

사용자가 노드를 클릭 한 다음 마우스 오른쪽 버튼을 클릭하여 선택해야합니다.

노드를 마우스 오른쪽 버튼으로 클릭하여 해당 노드를 선택할 수 있습니까? 그렇다면 가장 적합한 방법은 무엇입니까?

답변

39

모두 왼쪽과 오른쪽 클릭은 클릭 이벤트가 발생하고 선택을 변경하도록합니다. 그러나 특정 상황 (아직 추적하지 않으려 고 귀찮은 상태)에서 선택 항목은 오른쪽 클릭 한 노드에서 처음 선택한 노드로 변경됩니다. 지적 다른 포스터 중 하나로서,

treeView.MouseDown += (sender, args) => 
    treeView.SelectedNode = treeView.GetNodeAt(args.X, args.Y); 

조금 더 나은 : 위해

당신이 강제로 MouseDown 이벤트를 사용하여 선택한 노드를 변경할 수있는 권리를 클릭하여 선택을 변경되었는지 확인합니다 NodeMouseClick 이벤트를 사용하는 것입니다.

treeView.NodeMouseClick += (sender, args) => treeView.SelectedNode = args.Node; 
+4

동의합니다. 이 코드를 Form의 생성자에 추가하기 만하면 나를위한 트릭을 만들었습니다. 고맙습니다. –

+0

NodeMouseClick 접근법에서 한 가지 문제는 NodeMouseClick 이벤트가 끝날 때 선택된 노드를 변경한다는 것입니다. 그래서, 내 목적을 위해 컨텍스트 메뉴가 표시되기 전에 선택한 노드를 변경해야했습니다. 이를 위해 MouseDown 방식을 사용해야했습니다. – cigarman

+0

예 Coleman. 유효성 검사 추가 : if (e.Button == MouseButtons.Right) ... (적은 비용) – harveyt

15

예. 여기 NodeMouseClick 이벤트에 대한 처리 :

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
{ 
     treeView1.SelectedNode = e.Node; 
} 
3

드래그 컨텍스트 메뉴 스트립을 폼에 다음 :

private void treeView1_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Right) 
    { 
     // Display context menu for eg: 
     ContextMenu1.Show(); 
    } 
} 
관련 문제