2016-10-06 6 views
1

올바른 노드에 맞는 올바른 ContextMenuStrip을 설정하는 영리한 방법을 고안하는 데 정말 어려움을 겪고 있습니다. 3 단계의 트리 뷰가 있습니다. 그리고 그것과 함께 나는 각각의 존경받는 수준을 위해 만든 ContextMenuStrips 3 가지를 가지고 있습니다. 누군가가이 문제를 해결하기 위해 만났던 간단한 방법이나 트릭이 있습니까?TreeView에서 수준의 모든 노드에 ContextMenuStrip 설정?

노드를 마우스 오른쪽 단추로 클릭하면 선택한 노드가됩니다. 또는 일명 왼쪽 클릭과 동일한 작업을 수행합니다.

미안하지만 2 인 1 인이지만 내 문제 중 하나를 해결하기 위해이 주제를 충분히 아는 사람이라면 두 번째 항목도 알 수있는 좋은 기회입니다.

편집 : 나는 코드 줄 내 두 번째 문제에 대한 해결책을 발견

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

WPF 또는 승리 형태? – Steve

+0

@Steve win formsorry –

+0

일반적으로 목록의 각 레벨을 반환하는 항목이 있습니다. 해당 목록의 각 구성원에는 ContextMenu가 할당됩니다. 그런 다음 TreeView.Nodes.AddRange (List.ToArray())를 호출하십시오. –

답변

1

사용 ContextMenuStrip을의 선택된 노드의 속성을 설정하는 NodeMouseClick 이벤트 :

void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) { 
    if (e.Button == MouseButtons.Right) { 
    treeView1.SelectedNode = e.Node; 
    } 

    if (e.Node.Level == 0) { 
    e.Node.ContextMenuStrip = cms1; 
    } else if (e.Node.Level == 1) { 
    e.Node.ContextMenuStrip = cms2; 
    } else if (e.Node.Level == 2) { 
    e.Node.ContextMenuStrip = cms3; 
    } 
} 
+0

이것이 완벽합니다. 정확히 내가 필요한 것입니다. –

+0

.NET 용 TreeView에 대해 잘 알고 있다고 하시겠습니까? 노드에 대해 우리가 여기에서 채팅 할 수 있을지에 대해 더 궁금한 점이 있습니까? 이 사이트에 개인 메시지 옵션이 있는지 확실하지 않습니다. 기본적으로 만들려는 노드의 이름에 인덱스를 추가하는 방법을 알고 싶습니다. 내 현재 코드는 : "treeView1.SelectedNode.Nodes.Add ("[ "+ treeView1.SelectedNode.Index +"] "+ selectedModule);" 그러나 부모 노드의 인덱스 만 추가하기 때문에이 작업이 수행되지 않습니다. 새 노드가 아닙니다. 나는 어떻게 그것에 대해 갈 것인가? –

+0

@CapnJack 그것은 새로운 질문이 될 것입니다. 나는 그 코드로 무엇을하고 있는지 알지 못하지만 자식 노드 수를 원하는 것처럼 들린다. 인덱스 대신'treeView1.SelectedNode.Nodes.Count(). ToString()'과 같은 것. – LarsTech