C# C右键单击树视图节点

C# C右键单击树视图节点,c#,winforms,treeview,C#,Winforms,Treeview,我有一个父节点为Node0的树视图。我添加了3个子节点: 我有一个与每个子节点关联的弹出菜单 我的问题是:如果直接右键单击其中一个子节点,则不会显示弹出窗口。因此,我必须先选择子节点,然后右键单击以显示弹出窗口 如何更改代码,以便直接右键单击特定子节点打开弹出菜单? 弹出菜单列表中只有OpenMe菜单。单击此菜单时,将打开一个窗口,此窗口应与我单击的子菜单相关联。如何获取右击子菜单的事件并使用它显示表单? 编辑: 看看这个 行字符串s=treeView1.SelectedNode.Text;获取

我有一个父节点为Node0的树视图。我添加了3个子节点:

我有一个与每个子节点关联的弹出菜单

我的问题是:如果直接右键单击其中一个子节点,则不会显示弹出窗口。因此,我必须先选择子节点,然后右键单击以显示弹出窗口

如何更改代码,以便直接右键单击特定子节点打开弹出菜单? 弹出菜单列表中只有OpenMe菜单。单击此菜单时,将打开一个窗口,此窗口应与我单击的子菜单相关联。如何获取右击子菜单的事件并使用它显示表单? 编辑: 看看这个

行字符串s=treeView1.SelectedNode.Text;获取选定节点的名称,而不是已右键单击的节点的名称。 所以这里我必须用

private void treeview1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
                MessageBox.Show(e.Node.Name);
        }
我这样修改它:

try
        {
            TreeNodeMouseClickEventArgs ee;
            new chartModify(ee.Node.Name).ShowDialog();
        }
但它不起作用:错误:使用未分配的局部变量“ee”

编辑2:最终得到了解决方案

然后

private void treeview1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (e.Button == MouseButtons.Right)
            {
                s = e.Node.Name;
                menuStrip1.Show();
            }
        }
它起作用了,
谢谢

当您右键单击时,这将在特定的鼠标点为您提供treenode

if(e.Button == MouseButtons.Right)
        {
            TreeNode destinationNode = ((TreeView)sender).GetNodeAt(new Point(e.X, e.Y));
            //Do stuff
        }
您应该可以从这里打开一个特定的弹出菜单。

您可以尝试使用它使用的事件来获取按钮和单击的节点

private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if(e.Button == MouseButtons.Right)
        MessageBox.Show(e.Node.Name);
}
修改代码以显示弹出窗口和创建的表单

public partial class Form1 : Form
{
    string clickedNode;
    MenuItem myMenuItem = new MenuItem("Show Me");
    ContextMenu mnu = new ContextMenu();
    public Form1()
    {
        InitializeComponent();
        mnu.MenuItems.Add(myMenuItem);
        myMenuItem.Click += new EventHandler(myMenuItem_Click);
    }

    void myMenuItem_Click(object sender, EventArgs e)
    {
        Form frm = new Form();
        frm.Text = clickedNode;
        frm.ShowDialog(this);
        clickedNode = "";
    }

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            clickedNode = e.Node.Name;
            mnu.Show(treeView1,e.Location);
        }
    }
}

右键单击的代码在哪里?哪种技术?WinForms?网络表单?ASP.NETMVC?WPF?否我想要的是显示与所选节点相关的弹出菜单框。首先右键单击一个节点并选择ShowMe以显示一个表单,其标题设置为右键单击的节点名称。@DeathCoder这是Winforms还是Wpf?谢谢Mark Hall,您的代码给了我启发。我使用solutionNo编辑此主题,我想要的是显示与所选节点相关的弹出菜单框。首先右键单击节点并选择ShowMe以显示标题设置为右键单击的节点名称的表单。
if(e.Button == MouseButtons.Right)
        {
            TreeNode destinationNode = ((TreeView)sender).GetNodeAt(new Point(e.X, e.Y));
            //Do stuff
        }
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
{
    if(e.Button == MouseButtons.Right)
        MessageBox.Show(e.Node.Name);
}
public partial class Form1 : Form
{
    string clickedNode;
    MenuItem myMenuItem = new MenuItem("Show Me");
    ContextMenu mnu = new ContextMenu();
    public Form1()
    {
        InitializeComponent();
        mnu.MenuItems.Add(myMenuItem);
        myMenuItem.Click += new EventHandler(myMenuItem_Click);
    }

    void myMenuItem_Click(object sender, EventArgs e)
    {
        Form frm = new Form();
        frm.Text = clickedNode;
        frm.ShowDialog(this);
        clickedNode = "";
    }

    private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
    {
        if (e.Button == MouseButtons.Right)
        {
            clickedNode = e.Node.Name;
            mnu.Show(treeView1,e.Location);
        }
    }
}