2010-03-01 3 views
1

질문이 있습니다.C#, treeView, 표준 마우스 오른쪽 클릭 동작을 변경하는 방법

폼에 treeview 컨트롤을 추가하고 노드를 추가했습니다.

public Form1() 
    { 
     InitializeComponent(); 

     treeView1.Nodes.Add("root node #1"); 
     treeView1.Nodes.Add("root node #2"); 
     treeView1.Nodes.Add("root node #3"); 
     treeView1.Nodes.Add("root node #4"); 
     treeView1.Nodes.Add("root node #5"); 
    } 

표준 마우스 오른쪽 버튼 클릭 동작을 변경하고 싶습니다. 트리 노드를 마우스 오른쪽 버튼으로 클릭하면 트리 뷰가 잠시 동안 selectedIndex로 변경되었습니다. 나는 그것을 원하지 않는다. 표준 동작을 수정하려면 어떻게해야합니까? 이상에서

, 그것은 다음과 같습니다 오른쪽의 TreeNode 텍스트를 클릭 -> 컨텍스트 메뉴가 나타납니다 오른쪽의 TreeNode 텍스트 외부의 아무 곳이나 클릭 -> (절대적으로) 아무을 발생하지 않습니다.

+1

설명을 원할 경우 답변 아래에 주석을 사용하십시오. 그리고 담론을 시민들에게 공개하십시오. –

답변

3
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
{ 
if (e.Button == MouseButtons.Right) 
{ 
    // put your logic here like 
    // ContextMenu1.Show(); 
} 
} 
+0

아니요, 아니요, 아니요, 위의 모든 대답은 내가 알고 싶은 것이 아닙니다. nodemouseclick 이벤트에 대해 알고 있습니다. 나는 treeview의 표준 행동에 대해 물었다. 트리 뷰를 마우스 오른쪽 버튼으로 클릭했을 때 selectedIndex가 변경되는 이유는 무엇입니까? 나는 더 자세히 설명한다. 내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다. 나는 네가 원하는 것을 undestand 희망 것입니다. 노드 (노드에서 오른쪽에있는 공간) 근처의 공간을 마우스 오른쪽 버튼으로 클릭하면 treeview가 selectedIndex를 잠시 변경했습니다. 그것은 한 동안 노드를 선택합니다 (마우스 오른쪽 버튼을 계속 누르고있는 동안). 나는 쓸모없는 노드를 선택하고 싶지 않다. 어떻게 해결할 수 있습니까? –

0

오버라이드 MouseClick과 이벤트, 이벤트 체크에 클릭 바로 당신이 클릭 된 NodeMouseClick 이벤트를 처리하고 마우스 오른쪽 버튼을 점검 할 필요가

private void treeView1_MouseClick(object sender, TreeNodeMouseClickEventArgs e) 
    { 
     if (e.Button == MouseButtons.Right) 
     { 
      //Do something 
     } 
    } 
+0

아니요, 아니요, 아니요, 위의 모든 대답은 내가 알고 싶은 것이 아닙니다. nodemouseclick 이벤트에 대해 알고 있습니다. 나는 treeview의 표준 행동에 대해 물었다. 트리 뷰를 마우스 오른쪽 버튼으로 클릭했을 때 selectedIndex가 변경되는 이유는 무엇입니까? 나는 더 자세히 설명한다. 내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다. 나는 네가 원하는 것을 undestand 희망 것입니다.노드 (노드에서 오른쪽에있는 공간) 근처의 공간을 마우스 오른쪽 버튼으로 클릭하면 treeview가 selectedIndex를 잠시 변경했습니다. 그것은 한 동안 노드를 선택합니다 (마우스 오른쪽 버튼을 계속 누르고있는 동안). 나는 쓸모없는 노드를 선택하고 싶지 않다. 어떻게 해결할 수 있습니까? –

0

클릭 한 경우 :

treeView1.NodeMouseClick += (o, e) => { 
    if(e.Button == MouseButtons.Right) 
    { 
     //show menu... 
    } 
}; 
+0

아니요, 아니요, 아니요, 위의 모든 대답은 내가 알고 싶은 것이 아닙니다. nodemouseclick 이벤트에 대해 알고 있습니다. 나는 treeview의 표준 행동에 대해 물었다. 트리 뷰를 마우스 오른쪽 버튼으로 클릭했을 때 selectedIndex가 변경되는 이유는 무엇입니까? 나는 더 자세히 설명한다. 내 하찮은 영어 실력에 죄송하다는 말씀을 드리고 싶습니다. 나는 네가 원하는 것을 undestand 희망 것입니다. 노드 (노드에서 오른쪽에있는 공간) 근처의 공간을 마우스 오른쪽 버튼으로 클릭하면 treeview가 selectedIndex를 잠시 변경했습니다. 그것은 한 동안 노드를 선택합니다 (마우스 오른쪽 버튼을 계속 누르고있는 동안). 나는 쓸모없는 노드를 선택하고 싶지 않다. 어떻게 해결할 수 있습니까? –

1

Alex, 시도해보십시오. BeforeSelect 핸들러 이벤트 args Cancel은 마우스 오른쪽을 눌렀을 때 발생합니다. SelectedIndex가 실행되는 것을 억제합니다. MouseDown은 마우스 오른쪽 버튼을 누른 경우 컨텍스트 메뉴를 표시합니다. 디스플레이는 MouseDown 대신 MouseUp으로 이동하는 것이 안전합니다. MouseUp은 RightMouse 버튼이 눌려 있음을 나타내는 플래그를 지 웁니다.

내가 한 일에 관한이 모든 정보는 MSDN에서 구할 수 있습니다. 트릭은 실제로 모든 이벤트의 이름을 읽는 것입니다. 예, 많이 있습니다. 그렇다면 SelectedIndex를 변경하고 마우스를 클릭하는 경우 "흥미로운 이벤트"목록을 만듭니다. 즉각적으로 읽어야 할 이벤트 이름을 즉시 제한합니다 ... 마우스 오른쪽 버튼을 클릭하는 동안 텍스트를 강조 표시하지 않으려는 경우 ... 음, 이는 완전히 다른 문제입니다. 귀중한 사용자 의견이므로주의해야합니다.

bool isRBut = false; 
    private void treeView1_MouseDown(object sender, MouseEventArgs e) 
    { 
     isRBut = e.Button == MouseButtons.Right; 
     if (isRBut) 
     { 
      TreeViewHitTestInfo hti =treeView1.HitTest(e.Location); 
      if (hti.Location == TreeViewHitTestLocations.Label)     
       contextMenuStrip1.Show(treeView1, new Point(hti.Node.Bounds.Left, hti.Node.Bounds.Bottom));     
     } 
    } 

    private void treeView1_MouseUp(object sender, MouseEventArgs e) 
    { 
     isRBut = e.Button == MouseButtons.Right; 
    } 

    private void treeView1_BeforeSelect(object sender, TreeViewCancelEventArgs e) 
    { 
     e.Cancel = isRBut; 
    } 

또한 여기에 약간의 인간 언어 퀴즈가 있습니다. 바라기를 이것은 미래에 당신을 도울 것입니다. "아니, 아니, 아니"와 같은 문구는 영어 원어민이 매우 무례하다고 해석합니다. 보고있는 행동과 원하는 행동을 나열하기 위해 최선을 다하십시오. 사람들이 오해를하더라도 사실에만 집중하고 좌절감의 뚜렷한 징후를 남기지 마십시오. 이것은 당신이 뭘하고 있는지 얻을 수 있도록 도와 줄 것입니다. 뿐만 아니라 다른 사람들이 답변을받지 않는 습관이있는 경우, 많은 회원은 앞으로 회원들에게 답변을 제공하지 않는 습관을 갖게됩니다.

관련 문제