一、属性
1、Name(名称)
和窗口一样,Name属性是树视图类的实例化,我们可以用【名称.属性/方法】来使用树视图控件。
2、LinesRoot(根连接线)
该属性可以设置根节点是否有一个连接线。
3、Check(复选框)
该属性可以设置树视图控件节点的复选框。
4、Enabled(可用)、Visible(显示)
使能和显示树视图控件。
5、Checked(复选框选中)
如果树视图的Check属性设置为True,则选中节点时Checked属性为True,未选中则为False。Checked的参数为节点句柄(hTreeItem类型)
6、ImageList(图像列表)
如果树视图需要使用图片时,需要通过图像列表控件来载入图片,该属性用于设置图像列表的句柄。
7、ItemData(节点数据)
节点的附加数据,参数为节点句柄(hTreeItem类型)。
8、Selection(选中节点)
返回或设置选中的节点,注意返回或设置的都是hTreeItem类型数据。
9、Text(节点文本)
返回或设置节点的文本,参数为节点句柄(hTreeItem类型)。
二、方法
1、AddItem(添加子项)
该方法的函数原型如下:
Function AddItem(hParent As hTreeItem, TheText As CWSTR, clParam As Long = 0, iImage As Long = 0, iSelectedImage As Long = 0) As hTreeItem '新增项目:父项(TVI_ROOT 根节点),文本,附加值,正常图像列索引,选中时图像列索引,返回创建的项目的句柄
这里要说明的是如果是添加根节点,则hParent为TVI_ROOT,如果是子节点,则hParent为父节点的句柄。
2、InsertItem(插入子项)
Function InsertItem(hParent As hTreeItem, After As hTreeItem, TheText As CWSTR, clParam As Long = 0, iImage As Long = 0, iSelectedImage As Long = 0) As hTreeItem '插入项目:父项(TVI_ROOT 根节点),项句柄或:{2.TVI_FIRST 开头.TVI_LAST 末尾.TVI_ROOT 根.TVI_SORT} 按照字母顺序, 文本,附加值,正常图像列索引,选中时图像列索引,返回创建的项目的句柄
InsertItem的hParent参数与AddItem一样,这里说明一下After,是插入在哪一个节点的后面,也可以是插入在开头(TVI_FIRST) 、结尾(TVI_LAST)
3、DeleteItem(删除子项)
删除树视图的一个节点,函数原型为:
Function DeleteItem(hItem As hTreeItem) As Boolean '从树视图中删除项节点。如果成功返回 TRUE 否则为 FALSE
4、DeleteAllItems(删除全部)
删除树视图的全部节点。函数原型为:
Function DeleteAllItems() As Boolean '从树视图中删除所有项目。如果成功返回 TRUE 否则为 FALSE
5、Expand(展开节点)
展开或折叠子节点,函数原型为:
Function Expand(hItem As hTreeItem, nExpand As Boolean) As Boolean '展开或折叠要显示/隐藏子节点的节点。如果成功返回 TRUE 否则为 FALSE {2.True.False}
6、ExpandAllItems(展开全部)
展开全部节点。函数原型为:
Sub ExpandAllItems() '展开所有项目列表。
7、CollapseAllItems(折叠全部)
折叠全部节点。函数原型为:
Sub CollapseAllItems() '折叠所有项目列表。
8、GetRoot(获取跟节点)
获取第一个根节点。函数原型为:
Function GetRoot() As hTreeItem '返回最顶层的第一个项目,成功则返回该项目的句柄,否则返回NULL。
9、GetParent(获取父节点)
获取节点的父节点。函数原型为:
Function GetParent(hItem As hTreeItem) As hTreeItem '检索指定项目的父项目, 如果成功,则返回该项目的句柄,否则返回NULL。
10、GetChild(获取子节点)
获取节点的第一个子节点。函数原型为:
Function GetChild(hItem As hTreeItem) As hTreeItem '指定树视图项目的第一个子项目。 如果成功,则返回该项目的句柄,否则返回NULL。
11、GetCount(获取节点数)
获取树视图的节点总数。函数原型为:
Function GetCount() As Long '检索树视图控件中全部项目总数。
12、GetChildCount(获取子节点数)
获取节点的子节点数。函数原型为:
Function GetChildCount(hItem As hTreeItem) As Long '获取指定项目子级别数量
13、GetLevel(获取级别)
获取节点的级别,根节点为0级。函数原型为:
Function GetLevel(hItem As hTreeItem) As Long '返回项目的级别。根项被假定为零级。
14、GetPrevSiblin(上一个节点)
查找上一个同级别的节点。函数原型为:
Function GetPrevSiblin(hItem As hTreeItem) As hTreeItem '检索指定项目的上一个同级项目, 如果成功,则返回该项目的句柄,否则返回NULL。
15、GetNextSiblin(下一个节点)
查找下一个同级别的节点。函数原型为:
Function GetNextSiblin(hItem As hTreeItem) As hTreeItem '检索指定项目的下一个同级项目。 如果成功,则返回该项目的句柄,否则返回NULL。
三、事件
1、TVN_SelChanged事件
Sub Form1_TreeView1_TVN_SelChangeD(hWndForm As hWnd, hWndControl As hWnd,pNMTV As NM_TREEVIEW) '选择了列表
End Sub
选择了新节点后产生该事件。
四、示例
根据树视图的属性做一个示例。如图所示:
说明一:
修改背景色需要先修改数视图的类文件,增加BackColor属性(原有的公共的属性不能设置树视图的背景色),找到VFB文件夹下的Compile文件夹,打开找到inc文件夹,再打开找到WinClass文件夹,打开里面的ClsTreeView.inc文件,增加类的属性。在End Type前加入代码:
Declare Property BackColor() As COLORREF
Declare Property BackColor(nColor As COLORREF)
Declare Property ForeColor() As COLORREF
Declare Property ForeColor(nColor As COLORREF)
然后在文本末尾(位置随你喜欢)加入以下代码:
Property Class_TreeView.BackColor() As COLORREF
Return SendMessage(hWndControl,TVM_GETBKCOLOR,0,0)
End Property
Property Class_TreeView.BackColor(nColor As COLORREF)
SendMessage(hWndControl,TVM_SETBKCOLOR,0,nColor)
End Property
Property Class_TreeView.ForeColor() As COLORREF
Return SendMessage(hWndControl,TVM_GETTEXTCOLOR,0,0)
End Property
Property Class_TreeView.ForeColor(nColor As COLORREF)
SendMessage(hWndControl,TVM_SETTEXTCOLOR,0,nColor)
End Property
说明二:
需要添加ImageList(图像列表),用来显示节点的图标。在设计窗体中添加一个ImageList,然后在属性窗口的Image里点击下拉按钮,在弹出的图像列表编辑窗口里添加图片。图像列表编辑窗口如图:
按新增按钮即可到图像库中导入图片。本例子添加3个图片:book.png,dir.png,file.png。添加后如图:
代码如下:
Sub Form1_WM_Create(hWndForm As hWnd,UserData As Integer) '完成创建窗口及所有的控件后,此时窗口还未显示。注:自定义消息里 WM_Create 此时还未创建控件和初始赋值。
Dim hRoot As HTREEITEM
Dim hItem As HTREEITEM
TreeView1.BackColor = &HC0FFFF '设置背景色
TreeView1.ForeColor = &HFF0000 '设置前景色
TreeView1.ImageList = ImageList1.GethImageList '设置图像列表
'添加节点
hRoot = TreeView1.AddItem(TVI_ROOT, "根节点", 0, 0, 0)
hItem = TreeView1.AddItem(hRoot, "节点", 0, 1, 1)
TreeView1.AddItem hItem,"子节点",0,2,2
End Sub
Sub Form1_Command1_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
Dim hItem As HTREEITEM
hItem = TreeView1.Selection '获取当前选中节点
TreeView1.AddItem hItem,"子节点",1,2,2 '添加子节点
End Sub
Sub Form1_Command2_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
TreeView1.DeleteItem TreeView1.Selection
End Sub
Sub Form1_Command3_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
TreeView1.DeleteAllItems
End Sub
Sub Form1_Command4_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
TreeView1.Text(TreeView1.Selection) = TreeView1.Text(TreeView1.Selection) & "*"
End Sub
Sub Form1_Command5_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
Printa TreeView1.ItemData(TreeView1.Selection) '显示上一次的
Randomize
TreeView1.ItemData(TreeView1.Selection) = int(Rnd * 1000) '存储一个随机数
End Sub
Sub Form1_Command6_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
TreeView1.Expand TreeView1.Selection,True
End Sub
Sub Form1_Command7_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
TreeView1.Expand TreeView1.Selection,False
End Sub
Sub Form1_Command8_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
TreeView1.ExpandAllItems
End Sub
Sub Form1_Command9_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
TreeView1.CollapseAllItems
End Sub
Sub Form1_Command10_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
printa TreeView1.Selection
End Sub
Sub Form1_Command11_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
Printa TreeView1.GetRoot
End Sub
Sub Form1_Command12_BN_Clicked(hWndForm As hWnd, hWndControl As hWnd) '单击
TreeView1.BackColor = &HFFE0FF
End Sub
运行效果:
完整项目:
https://github.com/rainheart311/VisualFreeBASIC/tree/master/TreeView