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