|
楼主 |
发表于 2009-5-5 10:40
|
显示全部楼层
第8部分 控件与用户窗体
技巧134 使用TreeView控件显示层次
TreeView控件是一个树形结构的控件,该控件用于显示分层数据,如目录或文件目录,使程序的表现更为灵活,用户的操作更加方便,示例代码如下:- #001 Private Sub UserForm_Initialize()
- #002 Dim c As Integer
- #003 Dim r As Integer
- #004 Dim rng As Variant
- #005 rng = Sheet1.UsedRange
- #006 With Me.TreeView1
- #007 .Style = tvwTreelinesPlusMinusPictureText
- #008 .LineStyle = tvwRootLines
- #009 .CheckBoxes = False
- #010 With .Nodes
- #011 .Clear
- #012 .Add Key:="科目", Text:="科目名称"
- #013 For c = 1 To Sheet1.UsedRange.Columns.Count
- #014 For r = 2 To Sheet1.UsedRange.Rows.Count
- #015 If Not IsEmpty(rng(r, c)) Then
- #016 If c = 1 Then
- #017 .Add relative:="科目", relationship:=tvwChild, Key:=rng(r, c), Text:=rng(r, c)
- #018 ElseIf Not IsEmpty(rng(r, c - 1)) Then
- #019 .Add relative:=rng(r, c - 1), relationship:=tvwChild, Key:=rng(r, c), Text:=rng(r, c)
- #020 Else
- #021 .Add relative:=CStr(Sheet1.Cells(r, c - 1).End(xlUp)), relationship:=tvwChild, Key:=rng(r, c), Text:=rng(r, c)
- #022 End If
- #023 End If
- #024 Next
- #025 Next
- #026 End With
- #027 End With
- #028 End Sub
复制代码 代码解析:
在窗体初始化时将工作表中的科目名称填充TreeView控件。
第7行代码,设置TreeView控件每个列表的组成方式。Style属性设置值如表格所示。
第8行代码,设置TreeView控件显示根节点连线。TreeView控件的LineStyle属性设置为tvwRootLines显示根节点连线,设置为tvwTreeLines则隐藏根节点连线。
第9行代码,设置TreeView控件不显示复选框。
第10行代码使用Nodes属性返回对TreeView控件的Node对象的集合的引用。
第11行代码,清除TreeView控件所有的节点。
第12行代码,使用Add方法在Treeview控件的Nodes集合中添加一个Node对象。,Add方法语法如下:
object.Add(relative, relationship, key, text, image, selectedimage)
参数Object是必需的,一个有效的对象。
参数Relative是可选的,代表已存在的Node对象的索引号或键值。
参数relationship是可选的,代表新节点与已存在的节点间的关系,指定的Node对象的相对位置。relationship的设置值如表格所示。
参数key是可选的,唯一的字符串,可用于用Item方法检索Node。
参数text 是必需的,在Node中出现的字符串。
参数image是可选的,代表一个图像或在ImageList控件中图象的索引。
参数selectedimage是可选的,代表一个图像或在ImageList控件中图象的索引,在 Node被选中时显示。
第13行到第25行代码代,在根节点下添加子节点。添加子节点仍然使用Add方法,需要一个唯一的Key值,必须提供根节点的Key值(参数relative)和参数relationship值(tvwChild)。要将子节点链接到根节点的下面,参数relative必须与根节点的Key值一致,参数relationship必须设置为tvwchild。要使子节点有效,子节点必须也有自已唯一的Key值。
获得双击TreeView控件后的返回值的代码如下:- #001 Private Sub TreeView1_DblClick()
- #002 If TreeView1.SelectedItem.Children = 0 Then
- #003 Sheet1.Range("A65536").End(xlUp).Offset(1) = TreeView1.SelectedItem.Text
- #004 Else
- #005 MsgBox "所选择的不是末级科目,请重新选择科目!"
- #006 End If
- #007 End Sub
复制代码 TreeView1_ DblClick过程是TreeView控件的双击事件,将所选的科目名称写入到工作表中。
第2行代码判断所选节点是否是末级科目。TreeView控件的SelectedItem属性返回当前所选择的节点,而Children属性检查所选节点是否还有子节点,如没有子节点则返回0。
运行窗体效果如图所示。
|
评分
-
1
查看全部评分
-
|