C# treeview右键添加,删除,重名字树节点

首先在Form上添加右键菜单,ConTextMenuStrip设置好菜单的右键弹出项的名字,之后在Treeview设置MouceDown事件,判断是不是右键点击,是的话,在判断是不是选中节点,都满足弹出右键选择菜单。

我的TreeView因为需要设置成的只能有一个节点被选中。

 

 

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
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();
}
}
}

结果如图:



本文出自 “风清扬song” 博客,请务必保留此出处http://2309998.blog.51cto.com/2299998/1270544

 

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值