首先在Form上添加右键菜单,ConTextMenuStrip设置好菜单的右键弹出项的名字,之后在Treeview设置MouceDown事件,判断是不是右键点击,是的话,在判断是不是选中节点,都满足弹出右键选择菜单。
我的TreeView因为需要设置成的只能有一个节点被选中。
代码如下:
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 WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); InitTree(); } private void InitTree() { TreeNode node = new TreeNode("base1"); TreeNode node2 = new TreeNode("base2"); treeView1.Nodes.Add(node); treeView1.Nodes.Add(node2); node.Nodes.Add("a"); node.Nodes.Add("b"); node.Nodes.Add("c"); node2.Nodes.Add("d"); node2.Nodes.Add("e"); node2.Nodes.Add("f"); } //设置树单选,就是只能有一个树节点被选中 private void SetNodeCheckStatus(TreeNode tn, TreeNode node) { if (tn == null) return; if (tn != node) { tn.Checked = false; } // Check children nodes foreach (TreeNode tnChild in tn.Nodes) { if (tnChild != node) { tnChild.Checked = false; } SetNodeCheckStatus(tnChild, node); } } //在树节点被选中后触发 private void treeView1_AfterCheacked(object sender, TreeViewEventArgs e) { //过滤不是鼠标选中的其它事件,防止死循环 if (e.Action != TreeViewAction.Unknown) { //Event call by mouse or key-press foreach (TreeNode tnChild in treeView1.Nodes) SetNodeCheckStatus(tnChild, e.Node); string sName = e.Node.Text; } } //获得选择节点 private void GetSelectNode(TreeNode tn) { if (tn == null) return; if (tn.Checked == true) { m_NodeName = tn.Text; return; } // Check children nodes foreach (TreeNode tnChild in tn.Nodes) { GetSelectNode(tnChild); } } private void button1_Click(object sender, EventArgs e) { TreeNode node = null; foreach (TreeNode tnChild in treeView1.Nodes) { GetSelectNode(tnChild); } string sName = m_NodeName; } //选择树的节点并点击右键,触发事件 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)//判断你点的是不是一个节点 { switch (CurrentNode.Name)//根据不同节点显示不同的右键菜单,当然你可以让它显示一样的菜单 { case "": CurrentNode.ContextMenuStrip = contextMenuStrip1; break; default: break; } treeView1.SelectedNode = CurrentNode;//选中这个节点 } } } private String m_NodeName = null; //右键设置节点可以重命名 private void toolStripMenuItem2_Click(object sender, EventArgs e) { //窗体的LabelEdir为false,因此每次要BeginEdit时都要先自LabelEdit为true treeView1.LabelEdit = true; treeView1.SelectedNode.BeginEdit(); } //右键添加节点 private void toolStripMenuItem1_Click(object sender, EventArgs e) { //在Tree选择节点的同一级添加节点 treeView1.LabelEdit = true; TreeNode CurrentNode = treeView1.SelectedNode.Nodes.Add("Node1"); //更新选择节点 treeView1.SelectedNode.Checked = false; CurrentNode.Checked = true; //使添加的树节点处于可编辑的状态 CurrentNode.BeginEdit(); } //右键删除节点 private void toolStripMenuItem3_Click(object sender, EventArgs e) { treeView1.SelectedNode.Remove(); } } }
结果如图:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。