2011-12-16 1 views
3

나는 한 무리의 TreeNodes가있는 TreeView 컨트롤을 가지고있다. 각 노드의 ContextMenu에는 상태에 따라 다른 MenuItem이 있습니다. 그래서 나는 현재 각 TreeNode에 고유 한 ContextMenu를 첨부하고 있습니다.컨텍스트 메뉴가 호출 된 TreeNode는 어떻게 가져 옵니까?

그런 다음 MenuItem의 click 이벤트에서 ContextMenu가 속한 TreeNode를 얻으려고합니다.

MenuItem mi = (MenuItem)sender; 
ContextMenu tm = mi.GetContextMenu(); 
var sc = tm.SourceControl; 

문제는 tm.SourceControl == null입니다. TreeNodeControl에서 파생되지 않은 것으로 나타났습니다. 그렇다면 SourceControl 속성이 null입니까? 어떻게 적절한 TreeNode 객체를 얻을 수 있습니까? 아니면 심지어 TreeView 개체?

+0

당신이 유래 이전 포스트에서 살펴 볼 수 있습니다/questions/2527/c-sharp-treeview-context-menus – MethodMan

+0

도움이되었습니다. 나는 내 수색에서 그것을 보지 못했다. 감사. 이 질문으로 무엇을합니까? – scott

답변

2

질문을 이해할 수 없습니다.

당신은 트 리뷰에서 클릭을하면 선택된 노드 및 얻기 위해이 작업을 수행 할 수 있습니다 : 그것은 http://stackoverflow.com 도움이된다면

void tvMouseUp(object sender, MouseEventArgs e) 
{ 
    if(e.Button == MouseButtons.Left) 
    { 
     // Select the clicked node 
     tv.SelectedNode = tv.GetNodeAt(e.X, e.Y); 

     if(tv.SelectedNode != null) 
     { 
      myContextMenuStrip.Show(tv, e.Location) 
     } 
    } 
} 
+0

MenuItem 클릭 이벤트를 사용하는 TreeView 클릭 이벤트를 사용하지 않았습니다. 그러나 이것이 내 해결책을 찾는 데 도움이되었습니다. Treeview는 항상 사용할 수 있으며 하나만 있습니다. 따라서 이벤트 핸들러 매개 변수에서 가져 오는 대신 직접 액세스하는 것입니다. – scott