kendo treeview 修改节点显示值_VBA学习笔记60-1: Treeview控件

523bcc8b4372f45c2950fd2067528256.png

学习资源:《Excel VBA从入门到进阶》第60集 by兰色幻想


本节讲Treeview控件。

TreeView控件是以树形结构显示数据的控件。利用TreeView控件,可以设计出树形结构图,便于用户选择不同的项目。

b6a85f2eaad0a5c0e231df44cb1b537d.png
总公司人事结构是一级节点,公司一、公司二、公司三是二级节点,部门是三级节点,人员是四级节点

首先需要把treeview控件添加到工具箱,依旧在工具箱,右键附加控件,找到Microsoft TreeView Control,确定,就可以在工具箱找到它了。

f8da6f04187390f5c4ad32409b7bc963.png

一、数据导入

treeview是由节点构成的,第一个节点叫顶级节点,其余的是子节点。

例:把以下公司结构表做成Treeview。

9de4a2853ca4b8002f28ab1e980f7ac3.png

可以看到已经把各级别标记为不同颜色,代码也是递进有层次感的,可以单从员工的代码看出他所属的公司和部门。下面以一个结构图展示节点分布:

e9581a8cf0464699d8ad248c5afeb7c2.png

代码思路讲解:

  1. treeview控件添加节点的ADD方法:
Treeview1.Nodes.Add(上一级节点的索引值,是否为子节点,节点的索引值,节点上显示的文字,图标的索引号,选取节点时的图标)
TreeView1.Nodes.Add(relative, relationship, key, text, image)

注意:

① 节点对象:Nodes

② 如果一级节点的索引值和创建节点的位置为空的话,则表示创建是的顶级节点。

③ 节点的索引值不能是纯数字。

④ 子节点的表示:tvwChild。

⑤ 选取节点时的图标可选,前四个参数必须。

套到例子里,写创建顶级节点的语句:

Set Nodx = TreeView1.Nodes.Add(, , "总公司", "总公司人事结构", 1) 

①上一级节点的索引值:因为是顶级节点,所以没有上一级节点的索引值,略过不填

②是否为子节点:顶级节点不是子节点,略过不填(不填内容也要写逗号啊)

③节点的索引值:设置为"总公司"

④节点上显示的文字:"总公司人事结构"

⑤选取节点时的图标:1(上节内容imagelist,因为有图标,所以记得也要在窗体插入imagelist控件)。

**假设不设置选取节点时的图标,代码可写为:

Set Nodx = TreeView1.Nodes.Add(, , "总公司", "总公司人事结构") 

最后的逗号可不写,因为这项参数是可选的。

写创建子节点(公司一)的语句:

Set Nodx = TreeView1.Nodes.Add("总公司", tvwChild, "A" & C2, C1 & "(" & C2 & ")", 2)

①上一级节点的索引值:“总公司”。

②是否为子节点:是,所以填tvwChild。

③节点的索引值:因为不能是纯数字,为方便记忆,把表格中的代码赋值给C2,写成 "A" & C2。以公司一为例,那么它的索引值就是“A1”。

④节点上显示的文字:C1 & "(" & C2 & ")",把表格中的级别赋值给C1。以公司一为例,那么它将会显示为“公司一(1)”。

⑤选取节点时的图标:2(imagelist控件的序号2图片)。

2. 代码逻辑

①要显示图标,所以先要配置好lmagelist控件。

②循环语句,循环获取级别和代码。

③判断语句,根据代码判断并生成对应级别的节点。

完整代码:

Private Sub UserForm_Initialize()Dim Nodx As nodeTreeView1.ImageList = ImageList1 '从imagelist控件中提取图片
Set Nodx = TreeView1.Nodes.Add(, , "总公司", "总公司人事结构", 1) '总公司是顶级节点的索引值,For x = 2 To Range("B65536").End(xlUp).RowC1 = Cells(x, 1)C2 = Cells(x, 2)If Len(C2) = 1 Then '如果代码长度为1,说明是顶级节点下的二级节点Set Nodx = TreeView1.Nodes.Add("总公司", tvwChild, "A" & C2, C1 & "(" & C2 & ")", 2)ElseIf Len(C2) = 3 Then '如果代码长度为3,说明是三级节点Set Nodx = TreeView1.Nodes.Add("A" & Left(C2, 1), tvwChild, "A" & C2, C1 & "(" & C2 & ")", 3)ElseIf Len(Cells(x, 2)) = 6 Then '如果代码长度为6,说明是四级节点Set Nodx = TreeView1.Nodes.Add("A" & Left(C2, 3), tvwChild, "A" & C2, C1 & "(" & C2 & ")", 4)End IfNextEnd Sub

运行演示:

272d014d97f39fbc04448c14bf1c170f.gif

二、数据读取

有数据导入,就有数据读取。如何让程序识别到我们点击了哪个节点呢?

还是接上例,想达到如下效果:

f73684d9869f4870c1e049b248dfe3c3.gif

从图中可以看到,每点击一个节点,旁边的文本框都会显示它的信息。

代码思路讲解:

  1. 表示选取的节点
SelectedItem 正在选取的节点
SelectedItem.Key 正在选取节点的索引值

2. 节点包含的信息,第一个信息是它的索引值,刚刚除了顶级节点的索引值特别设置为“总公司”,其他索引值都是“A代码”,代码长度不一。第二个信息是它显示出来的内容text,除了顶级节点特别设置为“总公司人事结构”,其他都是“级别名(代码)”。

所以我们需要根据代码长度判断,它所在的级别,使用判断语句。

①如果代码长度为2,表明它是二级节点,公司名称就是节点的text(注意去除后面的“(代码)”,部门和姓名没有,代码是去除首字母的索引值。

②如果代码长度为4,表明它是三级节点,公司名称是它的上一节点的text,部门是当前节点的text,姓名没有,代码是去除首字母的索引值。

上一节点 Nodes.Parent

②如果代码长度为7,表明它是四级节点,公司名称是它的上上一节点的text,部门是上一节点的text,姓名当前节点的text,代码是去除首字母的索引值。

上上一节点 Nodes.Parent.Parent

3. 去除Text后面的“(代码)“内容,因为比较重复,写一个VBA自定义函数。代码和级别的长度不一,所以不能直接用Left,需要再加一个函数组合用,用字符查找函数InStr查找”(“的位置,用instr,算出left的截止位置。

Function 截取名称(AAA)截取名称 = Left(AAA, InStr(1, AAA, "(") - 1)
End Function

完整代码:

Private Sub TreeView1_Click()
Dim MyItem As nodeSet MyItem = TreeView1.SelectedItem 'SelectedItem正在选取的节点If Len(MyItem.Key) = 2 Then 'SelectedItem.Key 正在选取节点的索引值TextBox1 = 截取名称(MyItem.Text) '如果是顶级节点,公司名称等于节点的显示内容(去掉代码)TextBox2.Value = ""TextBox3.Value = ""TextBox4 = Replace(MyItem.Key, "A", "") '替换掉A后的代码
ElseIf Len(MyItem.Key) = 4 ThenTextBox1 = 截取名称(MyItem.Parent.Text) ' MyItem.Parent.Text上一级节点的显示文本TextBox2 = 截取名称(MyItem.Text)TextBox3.Value = ""TextBox4 = Replace(MyItem.Key, "A", "")
ElseIf Len(MyItem.Key) = 7 ThenTextBox1 = 截取名称(MyItem.Parent.Parent.Text)TextBox2 = 截取名称(MyItem.Parent.Text)TextBox3 = 截取名称(MyItem.Text)TextBox4 = Replace(MyItem.Key, "A", "")End IfEnd Sub

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/556042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java之路:this关键字的用法

(1)this代表当前对象的一个引用。所谓当前对象,指的是调用类中方法或属性的那个对象。 最经常使用this关键字的情况,是在对象的一个属性被方法或构造器的参数屏蔽时,需要调用这个被屏蔽的属性,如下&#xf…

跑分cpu_一加8T现身跑分网站:CPU正式敲定 10月15日见

一加8T将于10月15日发布(海外版将于10月14日发布),现在关于一加8T的核心规格确认。今天,一加8T现身GeekBench跑分网站,确认该机搭载的是高通骁龙865旗舰处理器,而非高通骁龙865 Plus。与搭载高通骁龙865的一加8相比,一…

发那科攻丝回退参数_乐享:发那科MF选配功能诊断小结

小编微信:shukong99999乐享数控,专注数控电气乐享那科选项功能小结大家好,我是乐享数控,好久不见,今天起,给大家多总结,相互交流进步。1发那科MF选项功能诊断小结在调试过程中,除了M…

matlab怎么画二维热力图_[原创]Day3.箱线图和热力图的绘制

使用Matplotlib和Seaborn进行绘制箱线图和热力图。箱线图箱线图(boxplot)又称盒式图,可以显示数据的分散情况,由五个数值点组成:最大值(max)-上界、最小值(min)-下界、中位数(median)和上下四分位数(Q1, Q3)。它可以帮我们分析出数据的差异性…

vue图片点击超链接_10秒钟,告别ppt中难看的超链接

我相信大多数同学在创建超链接的时候都很疑惑为什么字体颜色会变成蓝色,且下方会出现一条横线,能不能把横线去掉或者改变颜色呢?零壹君回答你:能!快来跟零壹君一起学习吧!选中文字—点击【插入】—【超链接…

arr数组怎么取值_记一次思否问答的问题思考:Vue为什么不能检测数组变动

作者 | hfhan来源 | https://segmentfault.com/a/1190000015783546问题描述:Vue检测数据的变动是通过Object.defineProperty实现的,所以无法监听数组的添加操作是可以理解的,因为是在构造函数中就已经为所有属性做了这个检测绑定操作。但是官…

使用 ref 对已渲染到页面的节点进行标记

一、字符串形式的 ref <input type"text" /*给标签打上标记 ipt */ ref"ipt" />拿到标记的节点&#xff0c;对其进行操作 handleClick () > {console.log(this);// 用 ref 标记了的标签&#xff0c;都会保存在 refs 里面console.log(this.refs…

JAVA之private修饰成员方法默认是final型的?

Java之private修饰成员方法默认是final型的&#xff1f; private修饰的成员方法默认是final型的&#xff1f; 用fianl声明的成员方法是最终方法&#xff0c;最终方法不能被子类覆盖&#xff08;重写&#xff09; 从表面上看这个命题是错误的&#xff0c;private访问修饰符修饰…

程序员你真的理解final关键字吗?

文章目录1、修饰类2、修饰方法3、修饰变量4、final变量修饰变量&#xff08;成员变量、局部变量&#xff09;4、1 final修饰成员变量&#xff1a;4、2 final修饰局部变量&#xff1a;5、final变量和普通变量的区别6、final与static的藕断丝连7、关于final修饰参数的争议前言 提…

axios vue 动态date_Web前端Vue系列之-Vue.js 实战

课程简介&#xff1a;课程目标&#xff1a;通过本课程的学习&#xff0c;让大家掌握Vue.js的进阶知识并在项目中应用。适用人群&#xff1a;具有一定vue开发基础的开发人员。课程概述&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式Jav…

vue 组件 - 非单文件组件

一、定义组件 const school Vue.extend({name: xuexiao, // ----------------------------> 指定组件在开发者工具中显示的名字template: // ----------------------------> 模板<div>... 此处是结构</div>,data() { // ---------------------------->…

matlab安装好 启动总是闪退_在Ubuntu16.04下安装MATLAB2017b

1. 前言最近在折腾Ubuntu系统的高端机子&#xff0c;matlab这家伙的交互和可视化太方便了&#xff01;于是想在Linux下安装matlab&#xff0c;在各个版本中&#xff0c;matlab2017的性价比是非常高的&#xff0c;因此选择安装介个。阅读了很多帖子&#xff0c;综合找到几个靠谱…

vue 脚手架

一、 脚手架 初始 全局安装脚手架 npm i -g vue/cli切换到项目根目录&#xff0c;使用 vue create 项目名称 创建项目使用 npm run serve | yarn serve 启动项目 如果中途卡顿 使用 npm 淘宝镜像 npm config set registry --> https://registry.npm.taobao.orgvue 隐藏了…

这篇文章绝对让你深刻理解java类的加载以及ClassLoader源码分析

前言 package com.jvm.classloader;class Father2{public static String strFather"HelloJVM_Father";static{System.out.println("Father静态代码块");} }class Son2 extends Father2{public static String strSon"HelloJVM_Son";static{Syste…

bigdecimal js 判断等于0_为啥阿里禁用BigDecimal的equals方法做等值比较

BigDecimal&#xff0c;相信对于很多人来说都不陌生&#xff0c;很多人都知道它的用法&#xff0c;这是一种java.math包中提供的一种可以用来进行精确运算的类型。很多人都知道&#xff0c;在进行金额表示、金额计算等场景&#xff0c;不能使用double、float等类型&#xff0c;…

git提交到github总是要输入密码_GitHub不为人知的秘密

本来想叫《GitHub骚操作》的&#xff0c;发现相关的文章已经有很多&#xff0c;而且和我本章要讲的内容完全不同&#xff0c;所以就换了这个也算贴切的标题。起因之前写过一篇文章《VM Manager 插件分享》&#xff0c;事后我发现有个地方不对劲&#xff01;看之前文章标题大家应…

MyBatis中大于号以及小于号的表达方式

mybatis使用的是xml格式的文件。使用>和<号的时候&#xff0c;会存在与xml的标签的规范冲突。 1.场景还原 在实际项目中&#xff0c;有很多需求需要通过设定一个具体的时间段来搜索或过滤所需的数据&#xff0c;今天笔者就mybatis中时间比较涉及到的大于&#xff0c;小于…

ug冲模标准件库_昆山兴模lt;携手gt;武汉益模,打通冲模“智能设计+精益管理”的最后一道关卡...

武汉益模科技股份有限公司是国内领先的工业互联网及智能制造的解决方案提供商&#xff0c;为模具、装备、军工、汽车、家电及等有柔性化生产需求的工厂提供专业的智能设计/信息化管理/智能加工/数字化工厂等工业软件、工业机器人自动化以及智能装备&#xff0c;拥有麦格纳、安波…

简述网络调研的作用_利用龙伯球透镜天线提升高铁4G网络覆盖

透镜天线&#xff0c;一种能够通过电磁波&#xff0c;将点源或线源的球面波或柱面波转换为平面波从而获得笔形、扇形或其他形状波束的天线。通过合适设计透镜表面形状和折射率 n&#xff0c;调节电磁波的相速以获得辐射口径上的平面波前。透镜天线吸收了许多光信息工程技术&…

SQLIntegrityConstraintViolationException: 异常解决

SQLIntegrityConstraintViolationException: Duplicate entry ‘xxx’ for key yyyzzz’异常解决 一. 异常现象 在做Java Web项目操作数据库添加数据的时候&#xff0c;突然发现曝出如下图所示异常&#xff1a; Caused by: java.sql.SQLIntegrityConstraintViolationExceptio…