C# treeview右键添加,删除,重名字树节点
首先在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 nodesforeach (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-pressforeach (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 nodesforeach (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为truetreeView1.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();}}}
结果如图:
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。