C#treeview不同节点触发不同的右键菜单

  private void treeView1_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Right)//判断你点的是不是右键
            {
                Point ClickPoint = new Point(e.X, e.Y);
                TreeNode CurrentNode = treeView1.GetNodeAt(ClickPoint);
                if (CurrentNode != null && true == CurrentNode.Checked)//判断你点的是不是一个节点
                if (CurrentNode != null)
                {
                   switch (CurrentNode.Name)//根据不同节点显示不同的右键菜单,当然你可以让它显示一样的菜单
                    {
                        case "":
                            CurrentNode.ContextMenuStrip = contextMenuStrip1;
                            break;

                        default:
                            break;
                    }
                    treeView1.SelectedNode = CurrentNode;//选中这个节点
                }
            }
        }

如上所示,所有的节点右键菜单都是一样的,我把代码改成如下所示的,好像右键菜单不显示了?不应该是名字叫ImplementationDataTypes显示右键菜单吗?
图片说明

  switch (CurrentNode.Name)//根据不同节点显示不同的右键菜单,当然你可以让它显示一样的菜单

                        case "ImplementationDataTypes":
                            CurrentNode.ContextMenuStrip = contextMenuStrip1;
                            break;

                        default:
                            break;
        if (CurrentNode != null)
            {
               switch (CurrentNode.Text)//根据不同节点显示不同的右键菜单,当然你可以让它显示一样的菜单
                {
                    case "xxxx1":
                        contextMenuStrip1.Items[0].Visible = false;
                        break;
                                                    case "xxxx2":
                        contextMenuStrip1.Items[1].Visible = false;
                        break;
                                                    case "xxxx3":
                        contextMenuStrip1.Items[2].Visible = false;
                        break;

                    default:
                        break;
                                                    //放最后
                                                    CurrentNode.ContextMenuStrip = contextMenuStrip1;
                }
                treeView1.SelectedNode = CurrentNode;//选中这个节点
            }

这样你是否更直观点?

这个是DEV的treelist 绑定右键:
public static void BindTreeListRightMouse(TreeList tl, PopupMenu pMenu, MouseEventArgs e)
{
TreeListHitInfo hi = tl.CalcHitInfo(e.Location);
if (hi.Node != null && e.Button == MouseButtons.Right)
{
//选中节点行
tl.FocusedNode = hi.Node;
if (tl.FocusedNode != null)
{
//绑定右键
pMenu.ShowPopup(Control.MousePosition);
}
}
}

            treeview绑定右键:
            private void TreeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)

                {        

                           if (e.Button != MouseButtons.Right) return;  

                           if (e.Node.Level == 0) return;        

                            TreeNode currentNode = this.productTypeTree.GetNodeAt(new Point(e.X, e.Y));    

                           ContextMenuStrip cms = new ContextMenuStrip();      

                           if (currentNode != null)   

                               { 

                                    this.productTypeTree.SelectedNode = currentNode;   

                                }

                  }

至于你说的:**根据不同节点显示不同的右键菜单,当然你可以让它显示一样的菜单**这个条件,可以用节点的Node.Level来判断,比如菜单有新增,编辑,修改。当level=0这个是一级节点,=1就是2级节点了,然后通过按钮的显隐来控制按钮功能

 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Q691925
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void treeView1_MouseDown(object sender, MouseEventArgs e)
        {
            var info = treeView1.HitTest(new Point(e.X, e.Y));
            ContextMenuStrip cms = new ContextMenuStrip();
            cms.Items.Add("name = " + info.Node.Name);
            cms.Items.Add("text = " + info.Node.Text);
            cms.Items[0].Click += new EventHandler((s1,e1) => Menu_Click(info.Node));
            cms.Items[1].Click += new EventHandler((s1, e1) => Menu_Click(info.Node));
            treeView1.ContextMenuStrip = cms;
        }

        void Menu_Click(TreeNode e)
        {
            MessageBox.Show(e.Text);
        }
    }
}

修改下

         private void treeView1_MouseDown(object sender, MouseEventArgs e)
        {
            var info = treeView1.HitTest(new Point(e.X, e.Y));
            if (info.Node != null) //做个判断,没有点任何Node的时候不要执行
            {
                ContextMenuStrip cms = new ContextMenuStrip();
                cms.Items.Add("name = " + info.Node.Name);
                cms.Items.Add("text = " + info.Node.Text);
                cms.Items[0].Click += new EventHandler((s1, e1) => Menu_Click(info.Node));
                cms.Items[1].Click += new EventHandler((s1, e1) => Menu_Click(info.Node));
                treeView1.ContextMenuStrip = cms;
            }
        }

图片说明