C#右键单击TreeView节点

时间:2013-01-08 05:49:14

标签: c# winforms treeview

我有一个TreeView父节点:Node0。我添加了3 subnodes

Node01
Node02
Node03

我有一个popup menu与每个子节点相关联。

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

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

    看看这个

    private void modifySettingsToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                String s = treeView1.SelectedNode.Text;
                new chartModify(s).ShowDialog();
            }
            catch (Exception er)
            {
                System.Console.WriteLine(">>>" + er.Message);
            }
        }
    

    String 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();
            }
    

    但不起作用:Error:Use of unassigned local variable 'ee'

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

    public string s;
    private void modifySettingsToolStripMenuItem_Click(object sender, EventArgs e)
            {
                try
                {
                    new chartModify(s).ShowDialog();
                }
                catch (Exception er)
                {
                    System.Console.WriteLine(">>>" + er.Message);
                }
            }
    

    然后

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

    它有效,
    感谢

2 个答案:

答案 0 :(得分:21)

您可以尝试使用NodeMouseClick使用TreeNodeClickEventArgs的事件来获取按钮和点击的节点。

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);
        }
    }
}

答案 1 :(得分:2)

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

if(e.Button == MouseButtons.Right)
        {
            TreeNode destinationNode = ((TreeView)sender).GetNodeAt(new Point(e.X, e.Y));
            //Do stuff
        }

从这里你可以打开一个特定的弹出菜单。