哪个对象是ContextMenuStrip中选择的选项

时间:2011-08-30 07:35:15

标签: c# contextmenustrip

我制作Windows窗体应用程序。我在表单TreeView上,我添加了几个节点并添加了ContextMenuStrip。

  var menu = new ContextMenuStrip();
  menu.Items.Add("Some text", new Bitmap(1, 1), new EventHandler(function_name));

  var treeView = new TreeView(..);
  treeView.ContextMenuStrip = menu;      

  treeView.Nodes.Add(new TreeNode()
  {
         ...
         Tag = someObject
  });

我的问题是如何检查函数function_name上单击了哪个treeNode并从ContextMenuStrip中选择了选项

修改

function_name sygnature

 public void pokaz_DoubleClick(object sender, EventArgs e)
 {
 }

3 个答案:

答案 0 :(得分:1)

function_name方法的签名是什么?

通常您可以检查sender参数的内容,但可能会发生TreeView而不是TreeNode,如果是这样,您可以检查e参数的属性。

另一种方法是,在每次按下鼠标时,确保在TreeView中选择鼠标下的节点,这样当function_name执行时,您的节点将被treeview.SelectedNode

答案 1 :(得分:1)

您可以处理TreeNodeMouseClick事件。在TreeNodeMouseClickEventHandler中,您将可以访问TreeNodeMouseClickEventArgs参数。此参数包含许多属性,可用于检查在哪个节点上单击了哪个鼠标按钮。例如。

private TreeNode rightClickeNode;

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

然后,您可以从function_name

访问rightClickedNode

答案 2 :(得分:1)

您可以在显示上下文菜单之前选择节点,然后您只需要检查SelectedNode属性。像这样:

private void treeView_MouseDown(object sender, MouseEventArgs e)
{
    //See what node is at the location that was just clicked
    var clickedNode = treeView.GetNodeAt(e.Location);

    //Make that node the selected node
    treeView.SelectedNode = clickedNode;
}

private void function_name(object sender, EventArgs e)
{
    var currentNode = treeView.SelectedNode;

    //Do something with currentNode
}