2011-12-16 68 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) 
     } 
    } 
} 
相关问题