《盟威软件快速开发平台》在线帮助中心

TreeView树形控件

TreeView 树形控件是一个非常有用的控件,尤其在用于展示多层级关系时它是最佳选择。Access 中并没有内置的树形控件,因此一般我们使用 MSCOMCTL.OCX 库中的 TreeView。

但自从 Windows 7 开始,不论是 Win8、Win10,MSCOMCTL.OCX 通用控件库中的控件就经常出现兼容性问题。即开发环境下的版本号和使用环境下的版本号,哪怕只有很小的差别,像 6.1.9834 和 6.1.9818 这样,都会出现异常不能使用。

MSComctlLib.TreeView 控件一般可能会遇到的兼容性问题有会以下两类:

这些问题发生的频率非常高!尤其是当一些在实际中已经在用的 Access 程序来说,遇到实在让人火冒三丈,因为业务部门等着马上要用呢!这是在坑爹呢还是在坑爹呢!

为了解决 MSComctlLib.TreeView 控件的兼容性问题,我们开发了一个 Access 版的树形控件 UMVsoftRDPLib.TreeView,作为替代方案。

UMVsoftRDPLib.TreeView 采用 HTML + CSS + JavaScript 进行呈现,通过 WebBrowser 浏览器控件作为容器,以 Access VBA 进行接口实现。在接口上,最大程度的兼容 MSComctlLib.TreeView 的接口,让你可以很快上手,对于已有的代码,只需要少量的修改即可。

开发接口
TreeView属性
名称 说明
BackColor 可读写Variant类型。指定树控件的背景颜色。可以是文本型的Hex颜色值,也可以是数字型的RGB颜色值。
BackPicture 可读写String类型。指定树控件的背景图片。可以使用相对路径,用点号指定当前目录。例如:= ".\Images\TreeViewBG.png"
FontName 可读写String类型。指定树控件的字体名称。缺省时默认使用“Microsoft YaHei”字体。
FontSize 可读写Integer类型。指定树控件的字号大小。缺省时默认使用10号字体。
ThemeName 可读写String类型。指定所使用的主题名称。
ShowCheckboxes 可读写Boolean类型。指定是否在节点前面显示复选框。
ShowIcons 可读写Boolean类型。指定是否在节点前面显示图标。
PathSeparator 可读写String类型。指定返回节点路径时使用的分隔符。缺省时默认为反斜杠“\”。
CheckChildNodes 可读写Boolean类型。指示当显示节点复选框时,勾选/取消勾选节点时,它的所有下级节点是否同步自动勾选/取消勾选。
SelectedNode 可读写Node类型。返回或指定当前被选中(获得焦点)的节点对象。
Nodes 只读Nodes类型。返回对Nodes集合及其相关属性的只读引用。
TreeView方法
名称 说明
CollapseAll 折叠所有节点。
ExpandAll 展开所有节点。
GetNodeFullPath 获取指定节点的完整路径。
参数:
NodeId - String类型。要获得其路径的节点的ID。
PathSeparator - String型。路径分隔符,缺省时默认为反斜杠“\”。
Reload 重新加载树控件到浏览器控件容器。
SetFocus 设置指定节点获得焦点。获得焦点的节点会自动高亮显示。
参数:
NodeId - String类型。要让其获得焦点的节点的ID。
RemoveFocus 移开焦点,所有节点均不获得焦点。
RaiseDoEvents 转移控制权。和调用DoEvents方法一样,用来在特别耗时的时候转移程序控制权,防止假死。
LoadToWebBrowser 将生成的树控件加载到浏览器控件容器。
参数:
WebBrowser - Object类型。浏览器控件容器对象。容器一般用 Me.WebBrowser1.Object 这样的语法引用。
LoadFromTable 根据一个结构符合要求的表(或查询)中的数据,自动生成树形节点。
参数:
TableName - String类型。数据表对象名称或查询对象名称。
NumberField - String类型。编号字段名称。
NumberLevelLegnth - Long类型。每级编号的长度是几位数。
TextField - String类型。用来作为节点文本的字段名称。
RootText - String类型。根节点的节点文本。
说明:表中必须有一个文本类型的编号字段,和一个用来显示节点文本的字段。每一级编号的长度固定。
编号示例:
0001
00010001
00010002
0002
00020001

TreeView事件
名称 说明
NodeCheck 节点复选框选择事件。当ShowCheckboxes属性设为True时,对节点前的复选框勾选/取消勾选时触发该事件。
NodeClick 节点单击事件。
NodeDblClick 节点双击事件。
Nodes属性
名称 说明
Item 只读Variant类型。根据索引或键值返回Nodes集合中的指定节点对象。
参数:
IndexKey - 指定节点的索引或键值。
Count 只读Long类型。返回Nodes集合中所有节点的个数。
Nodes方法
名称 说明
Add 添加节点。
参数:
ParentKey - 父节点键值。
Key - 节点键值。
Text - 节点文本。
Tag - 额外的标记文本。
Icon - 节点图标名称。
ForeColor - 节点字体颜色。
BackColor - 节点背景色。
FontBold - 字体是否加粗。
Expanded - 节点是否展开显示子节点。
Checked - 节点前的复选框是否勾选。

Remove 移除指定节点。
参数:
IndexKey - 要删除的节点的索引或键值。
Clear 清空所有节点。
Node属性
名称 说明
Index 只读Long类型。节点的索引。
Key 可读写String类型。返回或设置节点的唯一键值。
ParentKey 可读写String类型。返回或设置节点的父节点的唯一键值。
Text 可读写String类型。返回或设置节点的显示文本。
Icon 可读写String类型。返回或设置节点的图标。图标必须是当前目录下 Images\Icons子目录中的文件。
Checked 可读写Boolean类型。返回或设置节点前的复选框是否被勾选。
Expanded 可读写Boolean类型。返回或设置是否展开节点以显示其子节点(如果有)。
ForeColor 可读写String类型。返回或设置节点的字体颜色。
BackColor 可读写String类型。返回或设置节点的背景颜色。
FontBold 可读写Boolean类型。返回或设置节点字体是否加粗。
Tag 可读写String类型。返回或设置节点上额外存储的信息。
示例

窗体中添加WebBrowser控件(浏览器控件)作为容器。然后通过代码使用此TreeView控件:
具体实例可参考平台的SysFrmMain窗体中导航菜单的使用。

Public WithEvents mclsTree   As UMVsoftRDPLib.TreeView  '声明模块级树控件对象变量,WithEvents关键字指示允许该对象触发事件,注意这里WithEvents不能和New同时使用。

Private Sub Form_Load()
    Set mclsTree = NewTreeView()             '因为Access的限制,这里只能使用NewTreeView函数来对树控件进行实例化。
    With mclsTree
        .ShowIcons = True                       '显示图标
        .ShowCheckboxes = True                  '显示复选框
        .BackColor = "#FFFFFF"                  '背景色为白色
        .FontName = "Microsoft YaHei"           '使用微软雅黑字体
        .FontSize = 10                          '使用10号字体
        .Nodes.Clear                            '初始化清空所有节点
        .Nodes.Add , "K", "商品分类"            '创建根节点
    End With
    
    '方法一:常规加载节点方式
    Dim strSQL AS String
    Dim rst As Object
    strSQL = "SELECT * FROM 商品分类表 ORDER BY 分类编号"
    Set rst = CurrentDb.OpenRecordset(strSQL)
    Do Until rst.EOF
        With mclsTree.Nodes.Add("K" & Left(rst!分类编号, Len(rst!分类编号) - 4), "K" & rst!分类编号)
            .Text = Trim(Nz(rst!分类名称))
        End With
        rst.MoveNext
    Loop
    rst.Close
    
    '方法二:快捷加载节点方式
    mclsTree.LoadFromTable "商品信息表", "分类编号", 4, "分类名称", "(商品分类)"
    
    '注意,方法一和方法二只选其中一种使用即可。
    
    mclsTree.LoadToWebBrowser Me.ocxTreeMenu.Object '将树控件载入容器进行显示。
End Sub


Private Sub mclsTree_NodeClick(Node As UMVsoftRDPLib.Node)
    MsgBox "你点击的节点是" & Node.Text
End Sub

Private Sub mclsTree_NodeDblClick(Node As UMVsoftRDPLib.Node)
    MsgBox "你双击的节点是" & Node.Text
End Sub

修订记录

  1. 2018-08-31 2.0.0 版本加入
  2. 2019-07-10 2.5.1 版本修正 Icon 属性指定图标时,如果包含子目录路径,则图标无法显示的问题。