2011-12-16 70 views
3

我有一堆TreeNodes的TreeView控件。每個節點ContextMenu根據其狀態具有不同的MenuItem。所以我現在將每個TreeNode連接到它自己的ContextMenu。如何獲取調用上下文菜單的TreeNode?

TreeView tv = new TreeView(); 
TreeNode tn = New TreeNode(); 
tn.ContextMenu = GetContextMenu(state); 
tv.Nodes.Add(tn); 

然後在MenuItem的click事件中,我嘗試獲取ContextMenu所屬的TreeNode。

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

問題是,tm.SourceControl == null。我注意到TreeNode不是從Control派生。這就是爲什麼SourceControl屬性爲空?我如何獲得適當的TreeNode對象?甚至是TreeView對象?

+0

你可以看看這個計算器之前後,看看它是否有助於http://stackoverflow.com/questions/2527/c-sharp-treeview-context-menus – MethodMan 2011-12-16 14:20:54

+0

這有幫助。我沒有在我的搜索中看到。謝謝。我該怎麼處理這個問題? – scott 2011-12-16 14:25:32

回答

2

我不確定要理解你的問題。

當你對TreeView的點擊,你可以做到這一點,以獲得選擇的節點和:

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) 
     } 
    } 
} 
相關問題