首先在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