TreeView的使用.docx
《TreeView的使用.docx》由会员分享,可在线阅读,更多相关《TreeView的使用.docx(44页珍藏版)》请在冰豆网上搜索。
TreeView的使用
树形目录控件——TreeView控件介绍
1添加TreeView控件
在“控件工具箱”中单击鼠标右键,从弹出的快捷菜单中选择“附加控件”(如图1所示),出现“附加控件”对话框。
在该对话框中,找到“MicrosoftTreeViewControl,version6.0”并选中前面的复选框,如图2所示,单击“确定”按钮。
图1:
在工具箱中单击右键,选择“附加控件”。
图2:
在“附加控件”对话框选中“TreeView控件”。
注:
下面的示例中可能要用到ImageList控件和ImageCombo控件,因此,将这两个控件也添加到“控件工具箱”中。
最后的控件工具箱如图3所示。
图3:
添加控件后的工具箱。
2TreeView控件概述
TreeView控件显示Node对象的分层列表,每个Node对象均由一个标签和一个可选的位图组成。
TreeView一般用于显示文档标题、索引入口、磁盘上的文件和目录、或能被有效地分层显示的其它种类信息。
创建了TreeView控件之后,可以通过设置属性与调用方法对各Node对象进行操作,这些操作包括添加、删除、对齐和其它操作。
可以编程展开与折叠Node对象来显示或隐藏所有子节点。
Collapse、Expand和NodeClick三个事件也提供了编程功能。
2.1常用属性
(1)Nodes属性
返回对TreeView控件的Node对象的集合的引用。
[语法]object.Nodes
object代表一个对象表达式。
可以使用标准的集合方法(例如:
Add和Remove方法)操作Node对象,可以按其索引或存储在Key属性中的唯一键来访问集合中的每个元素。
(2)Style属性
返回或设置图形类型(图象、文本、+/-号、直线)以及出现在TreeView控件中每一Node对象上的文本的类型。
[语法]object.Style[=number]
Object代表一个对象表达式,number指定图形类型的整数,number的设置值是:
0仅为文本;1为图象和文本,2为+/-号和文本;3为+/-号、图象和文本;4为直线和文本;5为直线、图象和文本;6为直线、+/-号和文本;7(缺省)为直线、+/-号、图象和文本。
若Style属性设置为包含直线的值,则LineStyle属性就确定了直线的外观;如果Style属性设置为不含直线的值,则LineStyle属性将被忽略。
(3)Sorted属性
返回或设置值,此值确定Node对象的根节点或子节点是否按字母顺序排列。
[语法]object.Sorted[=boolean]
Object代表一个对象表达式。
boolean的设置值是:
True——Node对象根据它们的Text属性按字母顺序排列。
其Text属性由数字开始的Node对象也作为字符串排序,第一个数字确定在排序中的初始位置,后面的数字确定以后的排序。
False——Node对象不排序。
Sorted属性有两种用法,第一,在TreeView控件的根(顶)层排列Node对象;第二,对任何单个Node对象的子节点排序。
设置Sorted属性为True仅对当前Nodes集合排序。
在TreeView控件中添加新的Node对象时,必须再次设置Sorted属性为True,以便对添加的Node对象排列。
(4)appearance属性:
设置控件是否以3D效果显示。
(5)checkboxes属性:
决定在节点的每一项的旁边是否显示一个复选框,类似checkbox控件的作用。
(6)hottracking属性:
当鼠标指针经过某个条目时,这些条目是否突出显示,类似网页的超链接效果。
(7)labeledit属性:
决定用户是否能编辑控件中列出的项目,此项如果不想被改变,可将属性值设置为1
(8)linestyle属性:
设置列出的每项之间的行样式,即,如果为1,则当前项下还有子项的时候,它的前面会显示“+”号,如果值为2,则不显示“+”
(9)singlesel属性:
设置在树中选择新的条目时,是否展开此条目并收拢前一个条目,即设置为True时,并且当前选中的条目有子项的时候,会把子项展开,并将原来选中的条目收拢。
(10)style属性:
设置Treeview控件的每个列表的组成方式,比如“图片”+“文本”方式,等等,这样可以把Treeview设置得更美观一些。
2.2常用方法
(1)Add方法
在Treeview控件的Nodes集合中添加一个Node对象。
[语法]object.Add(relative,relationship,key,text,image,selectedimage)
[说明]
参数Object是必需的,为对象表达式。
参数Relative是可选的,代表已存在的Node对象的索引号或键值。
参数relationship是可选的,代表新节点与已存在的节点间的关系,指定的Node对象的相对位置。
relationship的设置值是:
0——tvwFirst首节点,该Node和在relative中被命名的节点位于同一层,并位于所有同层节点之前。
1——tvwLast最后的节点,该Node和在relative中被命名的节点位于同一层,并位于所有同层节点之后。
任何连续地添加的节点可能位于最后添加的节点之后。
2——tvwNext(缺省),下一个节点,该Node位于在relative中被命名的节点之后。
3——tvwPrevious,前一个节点,该Node位于在relative中被命名的节点之前。
4——tvwChild(缺省),子节点。
该Node为在relative中被命名的节点的子节点。
参数key是可选的,唯一的字符串,可用于用Item方法检索Node。
参数text是必需的,在Node中出现的字符串。
参数image是可选的,代表一个图像或在ImageList控件中图象的索引。
参数selectedimage是可选的,代表一个图像或在ImageList控件中图象的索引,在Node被选中时显示。
注意:
如果在relative中没有被命名的Node对象,则新节点被放在节点顶层的最后位置。
(2)GetVisibleCount方法
返回固定在TreeView控件的内部区域的Node对象的个数。
[语法]object.GetVisibleCount
object代表一个对象表达式,Node对象的个数取决于在一个窗口中能固定多少行。
总的行数取决于控件的高度和Font对象的Size属性。
可以使用GetVisibleCount属性确保可视的最小行数,这样可以精确地访问一个层。
如果最小行数是不可视的,可以用Height属性重新设置TreeView的大小。
2.3常用事件
NodeClick事件在一个Node对象被单击时发生。
[语法]PrivateSubobject_NodeClick(ByValnodeAsNode)
Object代表一个对象表达式,参数node是对被点取的Node对象的引用。
说明:
在单击节点对象之外的TreeView控件的任何部位,标准的Click事件发生。
当单击某个特定的Node对象时,NodeClick事件发生;NodeClick事件也返回对特定的Node对象的引用,在下一步操作之前,该引用可用来使这个Node对象可用。
NodeClick事件发生在标准的Click事件之前。
3TreeView控件的使用
下面通过示例来介绍TreeView控件的常用方法、属性和事件。
[示例一]TreeView控件常用方法、属性和事件示例
(1)
在VBE编辑器中插入一个用户窗体,并在该窗体上添加一些控件,即一个TreeView控件、一个ImageList控件、一些命令按钮控件、一些选项按钮控件和一些标签控件,如图4所示。
图4:
用户窗体界面
在用户窗体代码窗口,输入下面的代码:
PrivateSubUserForm_Initialize()
'初始化ImageList控件,添加图片
DimimgAsNewImageList
img.ListImages.Add1,"book1",LoadPicture(ThisWorkbook.Path&"\book1.jpg")
img.ListImages.Add2,"book2",LoadPicture(ThisWorkbook.Path&"\book2.jpg")
img.ListImages.Add3,"book3",LoadPicture(ThisWorkbook.Path&"\book3.jpg")
SetTreeView1.ImageList=img
'设置显示节点路径时的分隔符
TreeView1.PathSeparator="\"
EndSub
PrivateSubCommandButton1_Click()
'添加节点
DimNodeXAsNode
TreeView1.Nodes.Clear
SetNodeX=TreeView1.Nodes.Add(,,"课程科目","课程科目","book3")
SetNodeX=TreeView1.Nodes.Add("课程科目",tvwChild,"语文","语文","book1")
SetNodeX=TreeView1.Nodes.Add("课程科目",tvwChild,"数学","数学","book1")
SetNodeX=TreeView1.Nodes.Add("课程科目",tvwChild,"外语","外语","book1")
SetNodeX=TreeView1.Nodes.Add("课程科目",tvwChild,"政治","政治","book1")
SetNodeX=TreeView1.Nodes.Add("课程科目",tvwChild,"物理","物理","book1")
SetNodeX=TreeView1.Nodes.Add("课程科目",tvwChild,"化学","化学","book1")
SetNodeX=TreeView1.Nodes.Add("课程科目",tvwChild,"生物","生物","book1")
EndSub
PrivateSubCommandButton2_Click()
'设置为复选框显示
TreeView1.CheckBoxes=True
EndSub
PrivateSubCommandButton3_Click()
'清除节点
TreeView1.Nodes.Clear
EndSub
PrivateSubCommandButton4_Click()
'去掉复选框显示
TreeView1.CheckBoxes=False
EndSub
PrivateSubCommandButton5_Click()
'开启热跟踪功能
TreeView1.HotTracking=True
EndSub
PrivateSubCommandButton6_Click()
'编辑节点
TreeView1.StartLabelEdit
EndSub
PrivateSubCommandButton7_Click()
'显示根节点连线
TreeView1.LineStyle=tvwRootLines
EndSub
PrivateSubCommandButton8_Click()
'隐藏根节点连线
TreeView1.LineStyle=tvwTreeLines
EndSub
PrivateSubCommandButton9_Click()
'移除所选节点
'若为根节点,则将其子节点一并移除
TreeView1.Nodes.RemoveTreeView1.SelectedItem.Index
EndSub
PrivateSubCommandButton10_Click()
'统计节点个数
Label1.Caption="TreeView控件中节点对象的个数为:
"&TreeView1.Nodes.Count&"个."
EndSub
PrivateSubCommandButton11_Click()
'将所选节点变为粗体
TreeView1.SelectedItem.Bold=True
EndSub
PrivateSubCommandButton12_Click()
DimiAsLong
Fori=1ToTreeView1.Nodes.Count
TreeView1.Nodes(i).Expanded=True'展开所有节点
Nexti
EndSub
PrivateSubCommandButton13_Click()
DimiAsLong
Fori=1ToTreeView1.Nodes.Count
TreeView1.Nodes(i).Expanded=False'折叠所有节点
Nexti
EndSub
PrivateSubOptionButton1_Click()
'节点仅为文本
TreeView1.Style=tvwTextOnly
EndSub
PrivateSubOptionButton2_Click()
'节点为图像文本
TreeView1.Style=tvwPictureText
EndSub
PrivateSubOptionButton3_Click()
'节点为符号文本
TreeView1.Style=tvwPlusMinusText
EndSub
PrivateSubOptionButton4_Click()
'节点为直线文本
TreeView1.Style=tvwTreelinesText
EndSub
PrivateSubOptionButton5_Click()
'节点显示恢复正常
TreeView1.Style=tvwTreelinesPlusMinusPictureText
EndSub
PrivateSubTreeview1_Nodeclick(ByValNodeAsMSComctlLib.Node)
'返回对象路径
Label3.Caption=Node.FullPath
EndSub
PrivateSubTreeview1_NodeCheck(ByValNodeAsMSComctlLib.Node)
'复选框事件
Label5.Caption="当前选择的节点是:
"&TreeView1.SelectedItem.Text
EndSub
下面是该用户窗体的一些运行结果截图。
图5:
添加节点并展开节点。
图6:
为节点加上复选框。
图7:
选中复选框后,下面显示相应的信息。
图8:
选中某节点后显示相应的节点位置信息。
图9:
编辑某节点
图10:
显示根节点连线
图11:
将节点变为粗体
图12:
选择节点仅为文本后(其它选项按钮的效果用户可以自已体验)
[示例二]TreeView控件常用方法、属性和事件示例
(2)
在VBE编辑器中插入一个用户窗体,并在该窗体上添加一个TreeView控件、一个ImageList控件、两个标签控件、二个文字框、六个命令按钮,如下图13所示。
图13:
设计界面
在该窗体的代码窗口中,输入下面的代码:
OptionExplicit
'定义变量
DimiAsInteger
DimjAsInteger
DimnodxAsNode
DimbAsBoolean
PrivateSubUserForm_Initialize()
DimimgAsNewImageList
img.ListImages.Add1,"book1",LoadPicture(ThisWorkbook.Path&"\book1.jpg")
img.ListImages.Add2,"book2",LoadPicture(ThisWorkbook.Path&"\book2.jpg")
img.ListImages.Add3,"book3",LoadPicture(ThisWorkbook.Path&"\book3.jpg")
SetTreeView1.ImageList=img'链接图像列
TreeView1.LineStyle=tvwTreeLines'在兄弟节点和根节点之间显示线
'树状外观包含全部元素
TreeView1.Style=tvwTreelinesPlusMinusPictureText
'建立名称为"VBA控件"的父节点,选择索引为1的图像
Setnodx=TreeView1.Nodes.Add(,,"VBA控件","VBA控件",1)
'在"VBA控件"根节点下建立"第一章"子节点,选择索引为3的图像
Setnodx=TreeView1.Nodes.Add("VBA控件",tvwChild,"child01","第一章",3)
'在"VBA控件"根节点下建立"第二章"子节点,选择索引为3的图像
Setnodx=TreeView1.Nodes.Add("VBA控件",tvwChild,"child02","第二章",3)
b=False
EndSub
PrivateSubCommandButton1_Click()
IfTextBox1.Text<>""AndTextBox2.Text<>""Then
'不允许建立零字节的根节点和子节点
b=False
j=TreeView1.Nodes.Count
Fori=1ToTreeView1.Nodes.Count'检查新输入的根节点名称是否存在
IfTreeView1.SelectedItem.Children>0Then
IfTextBox1.Text=TreeView1.Nodes(i).TextThenb=True
EndIf
Nexti
Ifb=TrueThen'若存在,则在根节点下建立子节点
Setnodx=TreeView1.Nodes.Add(TextBox1.Text,tvwChild,"child"&j,TextBox2.Text,3)
Else'若不存在,则建立根节点和子节点
Setnodx=TreeView1.Nodes.Add(,,TextBox1.Text,TextBox1.Text,1)
Setnodx=TreeView1.Nodes.Add(TextBox1.Text,tvwChild,"child"&j,TextBox2.Text,3)
EndIf
TreeView1.Refresh
ElseIfTextBox1.Text=""ThenMsgBox"请输入根节点名称!
",vbInformation,"警告!
"
'系统提示
ElseIfTextBox2.Text=""ThenMsgBox"请输入子节点名称!
",vbInformation,"警告!
"
EndIf
EndSub
PrivateSubCommandButton2_Click()
Fori=1ToTreeView1.Nodes.Count
TreeView1.Nodes(i).Expanded=True'展开所有节点
Nexti
EndSub
PrivateSubCommandButton3_Click()
Fori=1ToTreeView1.Nodes.Count
TreeView1.Nodes(i).Expanded=False'折叠所有节点
Nexti
EndSub
PrivateSubCommandButton4_Click()
TreeView1.Sorted=True'排列顺序
EndSub
PrivateSubCommandButton5_Click()
IfTreeView1.SelectedItem.Index<>1Then
TreeView1.Nodes.RemoveTreeView1.SelectedItem.Index'删除选定的节点
EndIf
EndSub
PrivateSubCommandButton6_Click()
End'退出程序
EndSub
PrivateSubTreeView1_Expand(ByValNodeAsMSComctlLib.Node)
Node.ExpandedImage=2'节点被展开时,选择索引为2的图像
EndSub
PrivateSubTreeView1_NodeClick(ByValNodeAsMSComctlLib.Node)
DimstrAsString
IfTreeView1.SelectedItem.Children=0Then'检查是否有子节点,0为无
Fori=1ToTreeView1.Nodes.Count
IfTreeView1.Nodes(i).SelectedThen
str=TreeView1.Nodes(i).FullPath
'系统提示
MsgBox"您选择的是:
["&str&"]子节点!
"
EndIf
Nexti
EndIf
EndSub
运行后,初始化用户窗体,见UserForm_Initialize()事件代码。
首先在ImageList控件中添加三个图片,索引值分别为1、2、3;然后语句SetTreeView1.ImageList=img将图片链接到TreeView控件中。
下面的两条语句使用LineStyle属性和Style属性来设置TreeView控件外观,再使用Nodes对象的Add方法来添加节点,其语法为:
Nodes.Add([relative][,r