应用场景
在我工作涉及到的项目,树形控件多用于编辑工艺流程,只用到两层,一层父项做文件夹,一层子项做逻辑流程步骤,类似于下图:
知识点
本篇文章主要是分享关于树形控件的几个用法:
- 动态添加项,包括父项和子项;
- 子项在父项类的上下移动。
代码展示
- 树形控件运行时菜单
在树形控件空白的地方右键鼠标显示菜单“新建文件夹”,在已经存在的父项或子项上右键鼠标显示菜单“新建动作”和“删除动作”。
- “新建文件夹”条件结构分支使用树形控件的调用节点“在后面添加项”,Item Indent设置为0,表示他是第一级为父项;left cell string为文本内容输入。
- “新建动作”条件结构分支首先判断此时的鼠标是放在父项上还是同级的子项上,放在父项上直接将此时的Tag传入Parent Tag;如果放在同级子项上,要先获得他的父项,再将父项传入Parent Tag。child position是添加新项在文件夹中的位置。默认0放在最前面,-1表示放在最后面。left cell string 为第一列内容,child text 为后续每列的内容。
- “删除动作”条件结构分支很简单,使用树形控件的调用节点“删除项”,鼠标点击父项就删除整个文件夹,鼠标点击子项,则仅删除子项。
- 树形控件鼠标按下事件分支这个分支比较重要,我详细说一下。 这里是为子项上下移动做准备,当鼠标点击到子项的时候,获取所需要的信息包括这一行的所有列的文本内容、该子项在父项的child position、父项含有的子项个数、父项的tag以及indent level,我把它们做成了一个簇。indent level=0,说明是父项文件夹,不能移动,现在我暂时不考虑移动文件夹,只考虑将子项在文件夹内上下移动。(大家如果有时间有心思,可以研究下怎么移动整个父项)
- 按钮上下移动事件分支 我把树形控件的拖拽属性都禁用了,因为拖拽总是会导致缩进行改变,让子项和父项的关系变得混乱,而我只想要2级。我也研究了很久拖拽事件,但是没有好的结果,如果读者们有更好的方法,也可以分享出来。所以我选择了点击按钮来上下移动子项的方案。
主要的思路就是在移动前删除选择项,移动后再将删除的选择项添加到特定的child position位置。所以我们需要在“树形控件鼠标按下“事件分支时先获取需要的所有信息。当然也需要注意,我们在将子项移动至两端时,就要判断,不再移动了,所以我们需要获取父项文件夹内的child count。
源码分享
我把所有的内容都放在了一个vi内,因为要截图,我担心使用子vi不能把完整的代码展示出来。这样看起来源码显得很乱,读者们如果能够理解我的思路,自己去封装子vi,那就更好了。
百度网盘地址:
链接:https://pan.baidu.com/s/1mZ8BQ3PYHE2qWwx6fK0nvQ
提取码:njgf
本人使用的labview是2020版,所以使用相同或高于该版本的labview才能打开 。 如果确实不方便,可以告诉我,我来降版本,也很快的。
最后,如果本文帮助到了你,请为我点赞吧。