2009-04-05 3 views
1

기본 메뉴 양식처럼 클릭되는 트리 뷰 노드에 해당하는 적절한 그룹 상자를 표시하는 코드를 생성했습니다. 이 코드는 할 일을하지만 내 문제는 트리 뷰의 다른 항목을 마우스 오른쪽 버튼으로 클릭하면 다른 groubox가 호출되지 않도록 만드는 방법을 알아내는 것입니다.C# : NodeMouseClick 이벤트를 통해 트리 뷰 항목을 반복하는 데 도움이됩니다.

[상세보기]

트리 뷰에는 3 개의 노드가 있다고 가정 해 봅시다. 0) 일반; 1) 소리; 2) 정보; 노드 [1] 소리를 클릭하면 적절한 그룹 상자가 표시되지만 treeview 노드 [0] 일반을 마우스 오른쪽 버튼으로 클릭하면 프레임이 표시되고 마우스 오른쪽 버튼을 클릭하면 포커스가 되돌아옵니다 [1] (으)로 돌아가서 노드 0에 대한 그룹 상자는 그대로 두십시오.) 일반. 어떻게 이런 일이 일어나지 않도록 할 수 있습니까?

[코드]

private void tvFrames_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) 
    { 
     // How would I make sure that it won't display a different groupbox if another treeview node 
     // is currently being right clicked (temporarily selected before reverting back to previous focused node item)? 
     if (e.Node != null) 
     { 
      switch (e.Node.Index) 
      { 
       case 0: 
        ShowGroupBox(groupboxZero); 
        break; 

       case 1: 
        ShowGroupBox(groupboxOne); 
        break; 

       case 2: 
        ShowGroupBox(groupboxTwo); 
        break; 
      } 
     } 
    } 

답변

0

가장 좋은 대답은 treeView1_NodeMouseClick을 사용하지 않고 treeView1_AfterSelect 표준을 사용하는 것일 수 있습니다.

또한 데이터 저장 또는 이동 취소에 유용 할 수있는 BeforeSelect가 있습니다.

+0

이러한 이벤트가 있음을 지적 해 주셔서 감사합니다. nodeclick에서 afterselect 이벤트로 루틴을 전송했는데 완벽하게 작동했습니다. –

0

나는 명확하게 할 수 있나요? 이 논리를 왼쪽 클릭에 적용하기 만하면됩니까?

if (e.Button == MouseButtons.Left && e.Node != null) 
    { 
     GroupBox grp = e.Node.Tag as GroupBox; 
     if(grp != null) ShowGroupBox(grp); 
    } 

그럼 당신이 할 필요가 .Tag 설정됩니다

if (e.Button == MouseButtons.Left && e.Node != null) 
    { 
     switch(...) { 
      ... 
     } 
    } 

또한 - - 오히려 하드 코딩 인덱스 번호보다, 당신은 노드에 대한 .Tag을 설정하는 것이 좋습니다 수있는 모든 switch 등을 피하기 처음에 S :

someNode.Tag = groupboxZero; 
    someOtherNode.Tag = groupboxOne; 
    someThirdNode.Tag = groupboxTwo; 

(주 - 이것은 단지 cnosideration입니다 - 변화를하지 않는 코드가 작동하고, 당신을 행복하게하는 경우 그것).

+0

Element.Tag를 많이 사용했지만 사전 는 오류가 발생하기 쉽습니다. –

+0

유익한 응답에 감사 드리지만 나는이 답변을 Henk Holterman에게 보내야했습니다. beforeselect 및 afterselect 이벤트를 사용할 수 있다는 것을 알지 못했고 단순히 루틴을 전송하여 마우스 클릭 또는 태그 추가를 확인하지 않고도 완벽하게 작동했습니다. 태그 팁 appre –

관련 문제