TreeView控件用来显示信息的分级视图,如同Windows里的资源管理器的目录。TreeView控件中的各项信息都有一个与之相关的Node对象。TreeView显示Node对象的分层目录结构,每个Node对象均由一个Label对象和其相关的位图组成。在建立TreeView控件后,我们可以展开和折叠、显示或隐藏其中的节点。TreeView控件一般用来显示文件和目录结构、文档中的类层次、索引中的层次和其他具有分层目录结构的信息。
下面是一些常用的方法和属性:
添加节点
1
2
3
|
TreeNode tn1 = new
TreeNode(textBox1.Text.Trim());
tn1.Name = textBox1.Text.Trim(); treeView1.SelectedNode.Nodes.Add(tn1); |
编辑选中节点
只有当 TreeView 的 LabelEdit 属性设置为 true,此方法才生效。 如果 LabelEdit 设置为 false,将引发异常,并且树节点不会进入可编辑状态。与之对应的是EndEdit()方法来关闭编辑节点。
1
2
|
treeView1.LabelEdit = true ;
treeView1.SelectedNode.BeginEdit(); |
删除选中节点
1
|
treeView1.Nodes.Remove(treeView1.SelectedNode); |
展开选中节点
1
|
treeView1.SelectedNode.ExpandAll(); |
折叠选中节点
方法传递的布尔参数为 true 则使子节点保持当前状态;为 false 则折叠子节点。
1
|
treeView1.SelectedNode.Collapse( false );
|
选中节点折叠展开状态切换
1
|
treeView1.SelectedNode.Toggle(); |
显示复选框
与之相关联的是Checked属性获取或设置一个值,用以指示树节点是否处于选中状态。
1
|
treeView1.Check<span style= "line-height: 1.5;" >Boxes = true ;</span>
|
选中节点路径
1
|
treeView1.SelectedNode.FullPath |
选中节点树深度
1
|
treeView1.SelectedNode.Level; |
树节点数目
1
|
treeView1.GetNodeCount( true );
|
详细使用可以参考MSDN:http://msdn.microsoft.com/zh-cn/library/system.windows.forms.treenode(v=vs.100).aspx
实例1.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
|
private
void ForeachDisk()
{ DriveInfo[] dr = DriveInfo.GetDrives();
string
driveName = "" ;
foreach
(DriveInfo d in
dr)
{
switch
(d.DriveType)
{
case
DriveType.Fixed:
driveName = "本地磁盘("
+ d.Name.Substring(0, 2) + ")" ;
break ;
case
DriveType.Removable:
driveName = "可移动磁盘("
+ d.Name.Substring(0, 2) + ")" ;
break ;
case
DriveType.CDRom:
driveName = "DVD驱动器("
+ d.Name.Substring(0, 2) + ")" ;
break ;
case
DriveType.Network:
driveName = "网络驱动器("
+ d.Name.Substring(0, 2) + ")" ;
break ;
default :
driveName = "未知("
+ d.Name + ")" ;
break ;
}
this .treeView1.Nodes.Add(d.Name, driveName);
}
} |
显示文件夹内容:
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
|
private
void ReadDir(TreeNodeMouseClickEventArgs e)
{ if
(e.Node.Nodes.Count > 0)
{
if
(e.Node.IsExpanded)
{
e.Node.Collapse();
}
else
{
e.Node.Expand();
}
}
else
{
if
(Directory.Exists(e.Node.Name))
{
try
{
string [] allDirectory = Directory.GetDirectories(e.Node.Name);
foreach
( string
s in
allDirectory)
{
e.Node.Nodes.Add(s, s.Remove(0, s.LastIndexOf( "//" ) + 1));
}
listBox1.Items.Clear();
string [] allFiles = Directory.GetFiles(e.Node.Name);
foreach
( string
sf in
allFiles)
{
listBox1.Items.Add(sf.Remove(0, sf.LastIndexOf( "//" ) + 1));
}
}
catch
{
}
}
e.Node.Expand();
}
} |
实例2.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
|
private
Point Position = new
Point(0, 0);
private
void Form1_Load( object
sender, EventArgs e)
{ this .treeView1.AllowDrop = true ;
this .treeView1.ExpandAll();
} private
void treeView1_ItemDrag( object
sender, ItemDragEventArgs e)
{ DoDragDrop(e.Item, DragDropEffects.Move);
} private
void treeView1_DragEnter( object
sender, DragEventArgs e)
{ if
(e.Data.GetDataPresent( typeof (TreeNode)))
e.Effect = DragDropEffects.Move;
else
e.Effect = DragDropEffects.None;
} private
void treeView1_DragDrop( object
sender, DragEventArgs e)
{ TreeNode myNode = null ;
if
(e.Data.GetDataPresent( typeof (TreeNode)))
{
myNode = (TreeNode)(e.Data.GetData( typeof (TreeNode)));
}
else
{
MessageBox.Show( "error" );
}
Position.X = e.X;
Position.Y = e.Y;
Position = treeView1.PointToClient(Position);
TreeNode DropNode = this .treeView1.GetNodeAt(Position);
// 1.目标节点不是空。2.目标节点不是被拖拽接点的字节点。3.目标节点不是被拖拽节点本身
if
(DropNode != null
&& DropNode.Parent != myNode && DropNode != myNode)
{
TreeNode DragNode = myNode;
// 将被拖拽节点从原来位置删除。
myNode.Remove();
// 在目标节点下增加被拖拽节点
DropNode.Nodes.Add(DragNode);
}
// 如果目标节点不存在,即拖拽的位置不存在节点,那么就将被拖拽节点放在根节点之下
if
(DropNode == null )
{
TreeNode DragNode = myNode;
myNode.Remove();
treeView1.Nodes.Add(DragNode);
}
} |
下载:DEMO
PS:又是好几天没有更新了,这周是比较忙的,周六一整天的比赛,晚上坚持更新。