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相比,一…

初识 react

<!--学 react 的原因&#xff1a;1. 原生 js 操作 DOM 繁琐、效率低&#xff0c;每次都要去获取 DOM每次操作 DOM 都会引起页面的重绘重拍2. 原生 js 没有组件化&#xff0c;代码复用率低react 的特点&#xff1a;1. 采用组件化模式&#xff0c;声明式编码来提高开发效率以及…

Java中static作用及用法详解

1.1概述&#xff1a; static是静态修饰符&#xff0c;什么叫静态修饰符呢&#xff1f;大家都知道&#xff0c;在程序中任何变量或者代码都是在编译时由系统自动分配内存来存储的&#xff0c;而所谓静态就是指在编译后所分配的内存会一直存在&#xff0c;直到程序退出内存才会释…

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

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

jsx 语法规范

一、插值语法 – {} const str hello react; const VDOM <h1>{str}</h1>; // 注意&#xff1a;是一对大括号 {} 和 Vue( {{}} ) 区分开二、给标签添加类名 – className "" | {} /*css:.active {background-color: red;} */const VDOM <h1 class…

Java中static关键字的作用与用法

写在前面 这篇总结一下Java中static关键字的作用与用法。 参考文献如下&#xff1a; java]static关键字的四种用法Java中static关键字的作用Java中的static关键字解析Java中static关键字的作用 下面直接分析static关键字的四种基本用法。 修饰成员变量 平时的使用当中&am…

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

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

java中的Static、final、Static final各种用法

前言 对Static、final、Static final这几个关键词熟悉又陌生&#xff1f; static 加载&#xff1a;static在类加载时初始化&#xff08;加载&#xff09;完成 含义&#xff1a;Static意为静态的&#xff0c;但凡被static 修饰说明属于类&#xff0c;不属于类的对象。 可修饰…

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

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

组件的 props

一、函数式组件的 props function Demo (props) { // 由于函数式组件没有自己的 this 必须指定 propsreturn (<div><ul><li>{props.name}</li><li>{props.age}</li></ul></div>) }// 抽离挂到组件上面的 props 变量 const pe…

java中static、final 和 static final之间的区别

java中static、final 和 static final之间的区别 static可以修饰&#xff1a;全局属性&#xff0c;方法&#xff0c;代码块&#xff0c;内部类&#xff08;静态内部类或嵌套内部类&#xff09; 由于静态属性和方法是属于该类的所有对象的&#xff0c;所以可以用类名.静态属性…

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

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

使用 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访问修饰符修饰…

python高阶函数教学_Python 简明教程 --- 16,Python 高阶函数

对于那些快速算法&#xff0c;我们总是可以拿一些速度差不多但是更容易理解的算法来替代它们。—— Douglas Jones目录高阶函数一般以函数为参数。本节我们介绍Python 中三个方便的高阶函数&#xff0c;分别是&#xff1a;mapreducefilter如果你了解过分布式系统框架---Hadoop&…

react 组件传值

一、父传子 - 函数式组件 function Father (props) {const {money} props; // 解构render() {<div><Child getSonMoney{money}/></div>} }function Child (props) {return (<div><p>我爸爸现在有存款&#xff1a;${props.getSonMoney}</p&g…

深入理解static关键字

文章目录1、static存在的主要意义2、static的独特之处3、static应用场景4、静态变量和实例变量的概念5、静态变量和实例变量区别【重点常用】6、访问静态变量和实例变量的两种方式7、static静态方法8、static静态代码块9、static变量与普通变量区别10、静态内部类11、静态导包1…

kafka数据不丢失不重复_如何配置 KAFKA 使其消息不会丢失

不可靠的KAFKA这里的不可靠是指代KAFKA其设计之初就为高性能而设计&#xff0c;其是允许消息丢失的&#xff0c;但经过多个版本的升级之后&#xff0c;通过KAFKA的相关配置&#xff0c;我们可以将其作为可靠的队列(不丢消息的队列)。在本文里&#xff0c;不会具体列出要改哪个参…

聊聊 vue 生命周期

一、常用的常用的生命周期钩子&#xff1a; mounted: 发送 ajax 请求、启动定时器、绑定自定义事件、订阅消息等【初始化操作】 mounted() {console.log(vm 实例被挂载之后&#xff1a;mounted);this.timer setInterval(() > {...} }beforeDestroy: 清除定时器、解绑自定…