ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4351|回复: 21

[分享] VBA窗体学习笔记二:TreeView控件

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-9 14:52 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
一、概况
        TreeView控件是以树形结构显示数据的控件。利用TreeView控件,可以设计出树形结构图,便于用户分层选择不同的项目。
        首先需要把treeview控件添加到工具箱,VBA--工具箱--空白地方右键--附加控件,找到Microsoft TreeView Control,version 6.0 确定,就可以在工具箱找到它了。
        treeview是由节点构成的,第一个节点叫顶级(根)节点,其余的是子节点。
二、常用属性
        1、Appearance:外观。设置或获取TreeView控件的外观。
            Me.TreeView1.Appearance = cc3D '值为1(默认值),TreeView控件外观设为3D形状
            Me.TreeView1.Appearance =ccFlat '值为0,TreeView控件外观设为平面状
        2、BorderStyle:边框样式。设置或获取TreeView控件的边框样式。
            Me.TreeView1.BorderStyle = ccFixedSingle '值为1,固定单线框
            Me.TreeView1.BorderStyle = ccNone '值为0(默认值),无线框
            BorderStyle属性在Appearance属性设为cc3D(3D形状)时将失效,即要设置边框样式,控件外观就要设为平面形状。
        3、CheckBoxes:复选框。设置或获取TreeView控件的复选框状态。
            Me.TreeView1.CheckBoxes = True '值为1,显示复选框
            Me.TreeView1.CheckBoxes = False '值为0(默认值),隐藏复选框
        4、ControlTipText:控件提示文本。设置鼠标移到TreeView控件上后,显示的提示信息。
            Me.TreeView1.ControlTipText = "提示信息"  '该属性设置的提示信息将在一行显示,换行回车符都视为无效:Chr(10)、Chr(13)、vbNewLine、vbCrLf
        5、Enabled:可操作性。设置或获取TreeView控件的可操作性。
            Me.TreeView1.Enabled =  True '值为1(默认值),TreeView控件可以操作
            Me.TreeView1.Enabled = False '值为0,TreeView控件不可以操作,ControlTipText控件提示文本也不被显示
        6、Font:字体。设置或获取TreeView控件的文字特征,包括字体,字号大小,斜体,下划线等。
            Me.TreeView1.Font.Name = "宋体"  '字体名称
            Me.TreeView1.Font.Size = 14  '字体大小
            Me.TreeView1.Font.Italic = True  '斜体
            Me.TreeView1.Font.Bold = True  '粗体
            Me.TreeView1.Font.Underline = True  '下划线
            Me.TreeView1.Font.Strikethrough = True  '删除线
            不常用的两个:Me.TreeView1.Font.Weight(灰度)、Me.TreeView1.Font.Charset(字符集)
        7、FullRowSelect:整行选择。设置或获取TreeView控件的整行选择状态。
            Me.TreeView1.FullRowSelect = True  '值为1,整行选择,被选中的行从文本开始位置到控件右边界高亮显示
            Me.TreeView1.FullRowSelect = False  '值为0(默认值),文本选择,被选中的行文本部分高亮显示
        8、Height:高度。设置或获取TreeView控件的高度。
            Me.TreeView1.Height = 150
        9、Width:宽度。设置或获取TreeView控件的宽度。
             Me.TreeView1.Width = 450
        10、HelpContextID:帮助上下文ID。指定由 HelpFile 属性设置指定的自定义“帮助”文件中某个主题的上下文 ID。 Long 型,可读/写。
             Me.TreeView1.HelpContextID = 1
        11、HideSelection:隐藏所选内容。设置或获取TreeView控件一个值,用以指示选定的树节点是否即使在树视图已失去焦点时仍会保持突出显示。
             Me.TreeView1.HideSelection = True  '值为1(默认值),树视图已失去焦点时不突出显示
             Me.TreeView1.HideSelection = False  '值为0,树视图已失去焦点时突出显示
        12、HotTracking:热跟踪。设置或获取TreeView控件一个值,用以指示当鼠标指针移过树节点标签时,树节点标签是否具有超链接的外观。
             Me.TreeView1.HotTracking = True  '值为1,TreeView控件具有超链接的外观
             Me.TreeView1.HotTracking = False  '值为0(默认值),TreeView控件不具有超链接的外观
             如果属性 CheckBoxes 设置为 True,则 HotTracking 属性无效(微软官方说明,Excel LTSC2021实测有效)。
        13、Indentation:缩进。设置或获取TreeView控件一个值,该值为每个子树节点级别的缩进距离(折叠展开(+/-)符号中心与文本之间的距离)。
             Me.TreeView1.Indentation=15.55 '每个子树节点级别的缩进距离(以像素为单位)。 默认值为 19。
        14、LabelEdit :编辑标签。设置或获取TreeView控件是否可以编辑树节点的标签文本。
             Me.TreeView1.LabelEdit = tvwAutomatic  '值为0(默认值),自动的,可以编辑
             Me.TreeView1.LabelEdit = tvwManual  '值为1,手册,不可以编辑
        15、Left:左边。设置或获取TreeView控件距离主窗口(容器)左边界的距离。
             Me.TreeView1.Left = 10
        16、Top:顶部。设置或获取TreeView控件距离主窗口(容器)上边界的距离。
             Me.TreeView1.Top = 10
        17、LineStyle:线条样式。设置TreeView控件节点展开或收缩按钮(+/-)的隐藏或显示。
            Me.TreeView1.LineStyle=tvwTreeLines  '值为0(默认值),隐藏按钮
            Me.TreeView1.LineStyle = tvwRootLines  '值为1,显示按钮
        18、MouseIcon:鼠标图标。MousePointer=99时,设定一个自定义的鼠标图标。
        19、MousePointer:鼠标指针。设置或获取该属性值,鼠标的形状
             Me.TreeView1.MousePointer = ccDefault    '值为0(默认值),默认形状
             Me.TreeView1.MousePointer = ccArrow    '值为1,箭头,和值4、99形状一样
             Me.TreeView1.MousePointer = ccCross    '值为2,十字
             Me.TreeView1.MousePointer = ccIBeam   '值为3,光标
             Me.TreeView1.MousePointer = ccIcon   '值为4,箭头,和值1、99形状一样
             Me.TreeView1.MousePointer = ccSize   '值为5,带箭头的十字,和值15形状一样           
             Me.TreeView1.MousePointer = ccSizeNESW   '值为6,带箭头的/
             Me.TreeView1.MousePointer = ccSizeNS   '值为7,带箭头的|
             Me.TreeView1.MousePointer = ccSizeNWSE   '值为8,带箭头的\
             Me.TreeView1.MousePointer = ccSizeEW   '值为9,带箭头的一
             Me.TreeView1.MousePointer = ccUpArrow   '值为10,向上箭头
             Me.TreeView1.MousePointer = ccHourglass   '值为11,蓝色转动的圆圈
             Me.TreeView1.MousePointer = ccNoDrop   '值为12,红色圆圈加斜杠
             Me.TreeView1.MousePointer = ccArrowHourglass   '值为13,蓝色转动的圆圈,和值11形状一样,但要小一些
             Me.TreeView1.MousePointer = ccArrowQuestion   '值为14,箭头加问号
             Me.TreeView1.MousePointer = ccSizeAll   '值为15,带箭头的十字,和值5形状一样
             Me.TreeView1.MousePointer = ccCustom   '值为99,箭头,和值1、4形状一样
        20、OLEDragMode:对象拖动模式。设置或获取该属性值,该值指示一个控件向另外一个控件拖动项的模式。
             Me.TreeView1.OLEDragMode = ccOLEDragAutomatic  '值为1,自动拖动
             Me.TreeView1.OLEDragMode = ccOLEDragManual  '值为0(默认值),手动拖动
        21、OLEDropMode :对象放置模式。设置或获取该属性值,该值指示一个控件接受另外一个控件拖动项的放置模式。
             Me.TreeView1.OLEDropMode = ccOLEDropManual  '值为1,手动放置
             Me.TreeView1.OLEDropMode = ccOLEDropNone  '值为0(默认值),无放置
             注:OLEDragMode和OLEDropMode两个参数设置好了需要在相关事件(如:OLEDragDrop、OLEStartDrag等)中写代码才会有拖放效果。
        22、PathSeparator:路径分隔符。设置或获取树节点路径所使用的分隔符串,默认值为反斜杠字符 (\)。
             Me.TreeView1.PathSeparator = "/"   '设置树节点路径使用分隔符(/)
        23、Scroll:滚动。设置或获取该属性值,决定树视图控件是否显示滚动条并允许滚动(垂直和水平方向)。
             Me.TreeView1.Scroll = True  '值为1(默认值),允许滚动
             Me.TreeView1.Scroll = False  '值为0,不允许滚动
        24、SingleSel:单一选择。设置或获取该属性值,在树中选择新的条目时,是否展开该节点并使前一个所选的节点折叠。取值为:TrueFalse
             Me.TreeView1.SingleSel = True  '值为1,单击一个新节点(折叠变展开,展开变折叠,默认双击才能改变),前一个所选的节点折叠
             Me.TreeView1.SingleSel = False  '值为0(默认值),单击一个新节点不变(双击折叠变展开,展开变折叠),前一个所选的节点不变
        25、Sorted:排序。控件的节点是否自动以字母顺序排序。
             Me.TreeView1.Sorted = True  '值为1,自动排序
             Me.TreeView1.Sorted =  False  '值为0(默认值),不自动排序
        26、Style:风格。显示Node对象的层次列表,每个列标有一个标签和一个可选位图构成。
            Me.TreeView1.Style = tvwTextOnly  '值为0,仅为文本
            Me.TreeView1.Style = tvwPictureText  '值为1,+/-号和文本
            Me.TreeView1.Style = tvwPlusMinusText  '值为2,仅为文本
            Me.TreeView1.Style = tvwPlusPictureText  '值为3,+/- 号、图象和文本
            Me.TreeView1.Style = tvwTreeLinesText  '值为4,树中连线和文本
            Me.TreeView1.Style = tvwTreeLinesPictureText  '值为5,树中连线、图象和文本
            Me.TreeView1.Style = tvwTreeLinesPlusMinusText  '值为6,树中连线、+/-号和文本
            Me.TreeView1.Style = tvwTreeLinesPlusMinusPictureText  '值为7(默认值),树中连线、+/- 号、图象和文本
        27、TabIndex:Tab索引。设置或获取该属性值,控件在父窗体的编号(父窗体中对象响应Tab键的顺序)
             Me.TreeView1.TabIndex = 3  '当用户按Tab键时,TreeView1控件第三个获得焦点(默认值0,自动响应Tab键,系统根据控件创建顺序自动分配)
        28、TabStop:Tab停止。设置是否可以用"Tab"键选取此对象。
             Me.TreeView1.TabStop = True  '值为1(默认值),允许用"Tab"键选取
             Me.TreeView1.TabStop = False'值为0,不允许用"Tab"键选取
        29、Tag:标签。存储程序所需的附加数据。
        30、Visible:可见性。设置或获取该属性值,控件的可见性。
             Me.TreeView1.Visible = True  '值为1(默认值),控件可见
             Me.TreeView1.Visible = False  '值为0,隐藏控件
        31、Expanded:扩展。设置TreeView控件节点的展开或收缩。
            Me.TreeView1.Nodes(i).Expanded=True '值为1,展开节点
            Me.TreeView1.Nodes(i).Expanded=False '值为0,收缩节点
        32、Count:计数。统计TreeView控件节点的总数量。
            Debug.Print Me.TreeView1.Nodes.Count
        33、Name:名称。获取TreeView控件名。
            Debug.Print Me.ListView1.Name
        34、Text:文本。获取TreeView控件文本内容。
            Debug.Print Me.Treeview1.Nodes(i).text  '用于遍历控件时,获取节点名称
            Debug.Print Me.Treeview1.SelectedItem.text  '用于点击控件时,获取节点名称


评分

5

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-9 14:56 | 显示全部楼层
         35、Selected:选择。设置或获取该属性值,节点的选中状态。
            Me.TreeView1.Nodes(i).selected=True  '值为1,选中
            Me.TreeView1.Nodes(i).selected=False  '值为0,未选
        36、Checked:检查。设置或获取该属性值,复选框的选中状态。
            Me.TreeView1.SelectedItem.Checked = True  '值为1,选中
            Me.TreeView1.SelectedItem.Checked = False  '值为0,未选
            以上代码写在单击或双击事件中,实现点击节点就能更改复选框状态
        37、Index:索引。获取当前节点的顺序编号。
            Debug.Print Me.TreeView1.Nodes(i).Index  '用于遍历控件时,获取节点索引号(行号)
            Debug.Print Me.TreeView1.SelectedItem.Index  '用于点击控件时,获取节点索引号(行号)
        38、FullPath:全路径。获取从根节点到当前节点的连接。
            Debug.Print Me.TreeView1.Nodes(i).FullPath  '用于遍历控件时,获取节点全路径
            Debug.Print Me.TreeView1.SelectedItem.FullPath  '用于点击控件时,获取节点全路径
        39、Children:子节点。获取一个节点所有子节点的数量。
            Debug.Print Me.TreeView1.Nodes(i).Children  '用于遍历控件时,获取子节点的数量
            Debug.Print Me.TreeView1.SelectedItem.Children  '用于点击控件时,获取子节点的数量
        40、Parent:父节点。一个节点父节点的集合属性(能用BackColor、Bold、FullPath、Text、Index、Root等属性)。
            Debug.Print Me.TreeView1.Nodes(i).Parent.Text  '用于遍历控件时,获取父节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.SelectedItem.Parent.Text  '用于点击控件时,获取父节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.Nodes(i).Parent.FullPath  '用于遍历控件时,获取父节点的全路径
            Debug.Print Me.TreeView1.SelectedItem.Parent.FullPath  '用于点击控件时,获取父节点的全路径
        41、FirstSibling:第一个兄妹节点。同层第一个节点的集合属性(能用BackColor、Bold、FullPath、Text、Index、Root等属性)。
            Debug.Print Me.TreeView1.Nodes(i).FirstSibling.Text  '用于遍历控件时,获取同层第一个节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.SelectedItem.FirstSibling.Text  '用于点击控件时,获取同层第一个节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.Nodes(i).FirstSibling.Index  '用于遍历控件时,获取同层第一个节点的索引号
            Debug.Print Me.TreeView1.SelectedItem.FirstSibling.Index  '用于点击控件时,获取同层第一个节点的索引号
        42、Next:下一个节点。同层下一个节点的集合属性(能用BackColor、Bold、FullPath、Text、Index、Root等属性)。
            Debug.Print Me.TreeView1.Nodes(i).Next.Text  '用于遍历控件时,获取同层下一个节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.SelectedItem.Next.Text  '用于点击控件时,获取同层下一个节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.Nodes(i).Next.Selected  '用于遍历控件时,获取同层下一个节点的选中状态
            Debug.Print Me.TreeView1.SelectedItem.Next.Selected  '用于点击控件时,获取同层下一个节点的选中状态
        43、LastSibling:最后一个兄妹节点。同层最后一个节点的集合属性(能用BackColor、Bold、FullPath、Text、Index、Root等属性)。
            Debug.Print Me.TreeView1.Nodes(i).LastSibling.Text  '用于遍历控件时,获取同层最后一个节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.SelectedItem.LastSibling.Text  '用于点击控件时,获取同层最后一个节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.Nodes(i).LastSibling.Index  '用于遍历控件时,获取同层最后一个节点的索引号
            Debug.Print Me.TreeView1.SelectedItem.LastSibling.Index  '用于点击控件时,获取同层最后一个节点的索引号
        44、Nodes:节点。控件节点集合属性,遍历控件节点常用方法。
            Debug.Print Me.TreeView1.Nodes(i).FullPath  '获取第i个节点全路径
            Debug.Print Me.TreeView1.Nodes(i).Text  '获取第i个节点名称
            Debug.Print Me.TreeView1.Nodes.Count  '获取节点总数量
            Me.TreeView1.Nodes.Clear  '清空控件里所有节点
        45、SelectedItem:选择的项目。选中节点的集合属性,鼠标单击或双击事件常用方法。
            Debug.Print Me.TreeView1.SelectedItem.FullPath
            Debug.Print Me.TreeView1.SelectedItem.Index
            Debug.Print Me.TreeView1.SelectedItem.Text
         46、Root:根节点。根节点的集合属性(能用BackColor、Bold、FullPath、Text、Index、Root等属性)。
            Debug.Print Me.TreeView1.Nodes(i).Root.Text  '用于遍历控件时,获取根节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.SelectedItem.Root.Text  '用于点击控件时,获取根节点的名称,.Text可忽略不写
            Debug.Print Me.TreeView1.Nodes(i).Root.Children  '用于遍历控件时,获取根节点的子节点数量
            Debug.Print Me.TreeView1.SelectedItem.Root.Children  '用于点击控件时,获取根节点的子节点数量
三、常用方法。
        1、Add:添加。为treeview控件添加节点。
            Set rootnod =Me.TreeView1.Nodes.Add(relative, relationship, key, text, image, selectedimage)
            ① relative[可选],相关的,表示添加的节点是同级节点还是子节点。如果省略表示添加的节点是同级节点,如果设置了relative,表示添加的是子节点;
            ② relationship[可选],关系,添加节点类别(新节点与已存在节点间关系)的参数,对应值如下:
        tvwFirst(值为0):该Node和在relative中被命名的节点位于同一层,并位于所有同层节点之前。
        tvwLast(值为1):该Node和在relative中被命名的节点位于同一层,并位于所有同层节点之后。任何连续地添加的节点可能位于最后添加的节点之后。
        tvwNext(值为2,缺省):下一个节点,该Node位于在relative中被命名的节点之后。
        tvwPrevious(值为3):前一个节点,该Node位于在relative中被命名的节点之前。
        tvwChild(值为4,缺省),子节点。该Node 为在relative中被命名的节点的子节点。
            ③ key[可选],键值,唯一的字符串,可用于用Item方法检索Node;
            ④ text[必需],文本,在Node中出现的字符串,也就是TreeView控件中显示的文字;
            ⑤ image[可选],图像,代表一个图像或在ImageList控件中图象的索引;
            ⑥ selectedimage[可选],选定的图像,代表一个图像或在ImageList控件中图象的索引,在 Node被选中时显示。
        2、GetVisibleCount:获取可见节点总数。返回固定在TreeView控件的内部区域的节点对象的个数。
             Me.TreeView1.GetVisibleCount
        Node对象的个数取决于在一个窗口中能固定多少行。总的行数取决于控件的高度和Font对象的Size属性。可以使用GetVisibleCount属性确保可视的最小行数,
            这样可以精确地访问一个层。如果最小行数是不可视的,可以用Height属性重新设置TreeView的大小。
        3、Remove:移除。删除TreeView控件节点。
            Me.TreeView1.Nodes.Remove TreeView1.SelectedItem.Index
            这里Remove方法的唯一参数是TreeView1.SelectedItem.Index,表示被选中的待删除节点的Index值
        4、Clear:清除。清除TreeView控件所有节点。
            Me.TreeView1.Nodes.Clear
        5、SetFocus:设置焦点。使控件获得焦点
            Me.TreeView1.SetFocus
        6、StartLabelEdit:开始标签编辑。被选中的节点进入编辑状态
            Me.TreeView1.StartLabelEdit
            以上代码写入点击事件可实现点击节点就进入编辑状态
        7、EnsureVisible:保证可见。设置节点滚动到控件可见范围之内。
            Me.TreeView1.Nodes(i).EnsureVisible  '索引号为i的节点滚动到控件可见范围之内,同时设为展开状态

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-9 14:56 | 显示全部楼层

四、常用事件。
        1、AfterLabelEdit:编辑节点内容,退出节点编辑状态时触发。
        参数:Cancel值等于False(值为0)接受修改(默认值),等于True(值为1)不接受修改
                  NewString修改后的值
        Private Sub TreeView1_AfterLabelEdit(Cancel As Integer, NewString As String)
            If MsgBox("文本值已被已改为:" & NewString & Chr(10) & "是否接受修改?", vbOKCancel, "") = vbCancel Then Cancel = 1
        End Sub
        2、BeforeLabelEdit:进入节点编辑状态前触发。
        参数:Cancel值等于False(值为0)进入编辑状态(默认值),等于True(值为1)不进入编辑状态
        Private Sub TreeView1_BeforeLabelEdit(Cancel As Integer)
            If MsgBox("是否确定需要修改节点文本?", vbOKCancel, "") = vbCancel Then Cancel = 1
        End Sub
        3、Click:点击。鼠标点击控件触发。
        Private Sub TreeView1_Click()
            Debug.Print Me.TreeView1.SelectedItem.FullPath
            Debug.Print Me.TreeView1.SelectedItem.Index
            Debug.Print Me.TreeView1.SelectedItem.Text
        End Sub
        4、DblClick:双击。鼠标双击控件触发。
        Private Sub TreeView1_DblClick()
            Debug.Print Me.TreeView1.SelectedItem.FullPath
            Debug.Print Me.TreeView1.SelectedItem.Index
            Debug.Print Me.TreeView1.SelectedItem.Text
        End Sub
        鼠标单击双击事件没有可用参数,常用SelectedItem属性表示点击的节点
        5、Enter:进入。控件获得焦点时触发。
        以下三种情况均能触发Enter事件:
            ①、控件无焦点,鼠标点击控件或按Tab键(按键次数由TabIndex值决定)获得焦点;
            ②、加载窗体时控件TabIndex值为0(第一顺序)获得焦点;
            ③、控件内有节点处于编辑状态,退出编辑状态时获得焦点。
        注意:如果同时有Enter、AfterLabelEdit事件代码,则只触发Enter事件。
        Private Sub TreeView1_Enter()
            Debug.Print Me.TreeView1.TabIndex
        End Sub
        6、Exit:退出。控件失去焦点时触发。
        参数:Cancel值等于False(值为0)接受退出(默认值),等于True(值为1)不接受退出
        以下三种情况均能触发Exit事件:
            ①、控件有焦点,鼠标点击其它控件或按Tab键失去焦点;
            ②、控件有焦点,关闭窗体失去焦点;
            ③、控件内有节点即将进入编辑状态。
        注意:鼠标点击部分控件(如附加控件List View)不触发该事件。关闭窗体Cancel参数失效。
        Private Sub TreeView1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
            If MsgBox("是否退出TreeView控件?", vbOKCancel, "") = vbCancel Then Cancel = 1
        End Sub
        7、Expand:扩展。控件有扩展动作时触发,包括鼠标点击和代码扩展。
        参数:Node为扩展的节点,类似Node属性
        Private Sub TreeView1_Expand(ByVal Node As MSComctlLib.Node)
            Debug.Print Node.Text
        End Sub
        8、KeyDown:键盘按下。键盘有键按下时触发。
        参数:KeyCode按键编码;Shift按键前是否按下Shift键(0:没按、1:按下)
        Private Sub TreeView1_KeyDown(KeyCode As Integer, ByVal Shift As Integer)
            Debug.Print "KeyCode:" & KeyCode
            Debug.Print "Shift:" & Shift
        End Sub
        9、KeyPress:键盘按键。键盘有按键时触发。
        参数:KeyAscii实际键盘输入字符的ASCII编码
        Private Sub TreeView1_KeyPress(KeyAscii As Integer)
            Debug.Print "KeyAscii:" & KeyAscii
        End Sub
        10、KeyUp:键盘松开。松开键盘按键时触发。
        参数:KeyCode松开键编码;Shift是否松开Shift键(0:没松、1:松开)       
        Private Sub TreeView1_KeyUp(KeyCode As Integer, ByVal Shift As Integer)
            Debug.Print "KeyCode:" & KeyCode
            Debug.Print "Shift:" & Shift
        End Sub
        11、        MouseDown:鼠标按下。鼠标有键按下时触发。
        参数:Button(1:按下鼠标左键,2:按下鼠标右键,4:按下鼠标滚轮键)
                  Shift,Shift键是否同时按下,值为0表示没按下,值为1表示已按下
                  x和y,鼠标箭头在控件里的位置
        Private Sub TreeView1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
            Debug.Print "Button:" & Button
            Debug.Print "Shift:" & Shift
            Debug.Print "X:" & x
           Debug.Print "Y:" & y
        End Sub
        12、MouseMove:鼠标移动。当控件有焦点且鼠标在控件内移动时触发。
        参数:参照MouseDown事件,Button为0时无鼠标按键
        Private Sub TreeView1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
            Debug.Print "Button:" & Button
            Debug.Print "Shift:" & Shift
            Debug.Print "X:" & x
            Debug.Print "Y:" & y
        End Sub
        13、MouseUp:松开鼠标。当控件有焦点且鼠标有松开键时触发。
        参数:参照MouseDown事件
        Private Sub TreeView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
            Debug.Print "Button:" & Button
            Debug.Print "Shift:" & Shift
            Debug.Print "X:" & x
            Debug.Print "Y:" & y
        End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-9 14:57 | 显示全部楼层
参考:
1、十级节点内Key写法
    FirstLevelNode
    SecondLevelNode
    ThirdLevelNode
    FourthLevelNode
    FifthLevelNode
    SixthLevelNode
    SeventhLevelNode
    EighthLevelNode
    NinthLevelNode
    TenthLevelNode
2、初始化常用代码
    With Me.TreeView1
        .LineStyle = 1 '显示折叠展开按钮
        .LabelEdit = 1 '不可编辑
        .HotTracking = 1 '具有超链接的外观
        .FullRowSelect = 1 '整行选择
        .Nodes(1).Expanded = 1 '展开根节点
        .Indentation = 15 '节点文本与按钮的距离
        .Font.Size = 10 '控件字体
        .SingleSel = 1 '单一选择
    End With
3、遍历各节点,获得指定的属性值(部分)
    For i = 1 To Me.TreeView1.Nodes.Count
        Debug.Print Me.TreeView1.Nodes(i).Text '字符型,节点的显示文本(Add方法中text参数的值),也可写为:Me.TreeView1.Nodes(i)
        Debug.Print Me.TreeView1.Nodes(i).BackColor '数值型,节点的背景色
        Debug.Print Me.TreeView1.Nodes(i).Bold '布尔型,节点字体是否为粗体
        Debug.Print Me.TreeView1.Nodes(i).Checked '布尔型,节点复选框状态
        Debug.Print Me.TreeView1.Nodes(i).Selected '布尔型,节点选中状态
        Debug.Print Me.TreeView1.Nodes(i).Key '字符型,节点的唯一标识符(Add方法中key参数的值)
        Debug.Print Me.TreeView1.Nodes(i).Index '数值型,节点在控件中的数字编号,从根节点1开始
        Debug.Print Me.TreeView1.Nodes(i).Children '数值型,节点所属字节的数量
        Debug.Print Me.TreeView1.Nodes(i).Expanded '布尔型,节点扩展或收缩的状态
        Debug.Print Me.TreeView1.Nodes(i).FullPath '字符型,节点的完整路径,每个节点名称之间用"\"连接
        Debug.Print Me.TreeView1.Nodes(i).Root.Text '字符型,根节点的显示文本(Add方法中text参数的值),也可写为:Me.TreeView1.Nodes(i).Root
    Next
3、示例
功能:选中节点同时改变该行复选框的值,默认的情况下,选中节点不会改变该行复选框的值。
事件:NodeClick(节点点击);
变量:Node,【Node(或Node.Text),获得该行节点名称,Node.Index获得该行节点索引号。】
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
    If Node.Index > 1 Then '根节点设为总开总关功能,不参与子节点功能
        If TreeView1.Nodes(Node.Index).Checked Then
            TreeView1.Nodes(Node.Index).Checked = False
        Else
            TreeView1.Nodes(Node.Index).Checked = True
        End If
    End If
End Sub

功能:点击复选框同时选中该行,默认的情况下,点击复选框不会选中该行。
事件:NodeCheck(节点复选框);
变量:Node,【Node(或Node.Text),获得该行节点名称,Node.Index获得该行节点索引号。】
Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
    TreeView1.Nodes(Node.Index).Selected = True
End Sub

功能:不管是选中还是点击了复选框,选中和复选框同步进行,同时第一个复选框有"总开总关"功能。
事件:NodeClick、NodeCheck
变量:Node
Private Sub TreeView1_NodeClick(ByVal Node As MSComctlLib.Node)
    Select Case Node.Index
        Case 0
            Exit Sub
        Case 1
            If Me.TreeView1.Nodes(1).Checked Then
                Me.TreeView1.Nodes(1).Checked = False
            Else
                Me.TreeView1.Nodes(1).Checked = True
            End If
            For i = 2 To Me.TreeView1.Nodes.Count
                If Me.TreeView1.Nodes(1).Checked Then
                    Me.TreeView1.Nodes(i).Checked = True
                Else
                    Me.TreeView1.Nodes(i).Checked = False
                End If
            Next
        Case Is > 1
            If Me.TreeView1.Nodes(Node.Index).Checked Then
                Me.TreeView1.Nodes(Node.Index).Checked = False
            Else
                Me.TreeView1.Nodes(Node.Index).Checked = True
            End If
    End Select
End Sub

Private Sub TreeView1_NodeCheck(ByVal Node As MSComctlLib.Node)
    If Node.Index = 0 Then Exit Sub
    Me.TreeView1.Nodes(Node.Index).Selected = True
    If Node.Index = 1 Then '根节点设为总开总关功能,不参与子节点功能
        If TreeView1.Nodes(1).Checked Then
            For i = 2 To Me.TreeView1.Nodes.Count
                Me.TreeView1.Nodes(i).Checked = True
            Next
        Else
            For i = 2 To Me.TreeView1.Nodes.Count
                Me.TreeView1.Nodes(i).Checked = False
            Next
        End If
    End If
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-9 14:59 | 显示全部楼层
image.png

TreeView实用代码.zip

40.38 KB, 下载次数: 366

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-9 17:37 | 显示全部楼层
image.png

TreeViewa控件显示全国行政区划.zip

92.44 KB, 下载次数: 419

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2023-7-7 14:08 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
牛,谢谢分享。

TA的精华主题

TA的得分主题

发表于 2023-7-7 17:03 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢大佬分享!!!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-7-7 17:13 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2023-7-7 21:46 | 显示全部楼层
access中treeview经常会出现由于版本不同导致的不兼容的问题,这个问题非常烦人,一度让我想弃用微软自带的treeview控件而去用第三方的控件,不知道在excel中有没有类似的问题。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-6-3 19:43 , Processed in 0.036588 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表