LabVIEW之树形控件

一、树形控件基本构成

树形控件这个名称非常形象,其如同树一样,是典型的分层结构。树形控件的属性和方法使用非常灵活,树形控件的内容既可以静态编辑,也可以通过编程来动态填充。静态编辑树形控件适用于内容不变的应用场景,而动态填充则比较复杂,适用于内容无法确定的场合。

在了解树形控件的静态编辑前需要先熟悉树形控件各部分名称及其含义。如下图1-1所示,树形控件有几个基本元素构成,包括扩展/折叠符号、项目符号、左单元格字符串、子项文本。

图1-1 树形控件的基本构成

扩展/折叠符号可以选择Windows、LabVIEW、Mac OS等显示方式;

项目符号可以选择内部项目符号表中提供的符号,也支持用户自定义符号;

左单元格字符串表示项目的具体含义,直接显示在树形控件中,LabVIEW内部区分具体项目,是通过项目标识符(Tag)实现的(项目标识符也是字符串,可以与左单元格字符串相同,也可以不同);

子项文本时字符串数组,可以多列显示,常用于说明项目的用途,也可不用。

二、树形控件静态编辑

对于树形控件这种典型的分层结构而言,位于顶端的项目通常称为顶端项目或者根项,其特点是没有父项。而其他中间项目既有父项,又有子项,它们相互之间有隶属关系。位于末端的项目可以仅设置为子项,表示该项目不能作为其他项目的父项。

对于内容始终不变的树形控件,可以在开发编辑环境中直接使用操作选板编辑,简单介绍一下属性空间的编辑方法。

第一步:按照层次结构设计树形控件的内容草图,包括所有的左单元格字符串及其标识(Tag),如下图1-2所示。

图1-2内容草图

第二步:按照草图设计树形控件。对于树形控件而言,显示在树形控件中的左单元格字符串是不重要的,重要的是区别各个项目的标识。必须保证这些标识(Tag)是唯一的。默认情况下,LabVIEW会根据左单元格自动生成同名的标识。左单元格字符串可以相同,对于同名单元格,生成的标签会自动添加序号,如下图1-3所示,可以通过快捷菜单打开“编辑项”对话框来设置标识名称。在“编辑项”对话框中,按照顺序数据所有左单元格字符串,遵循从左到右、从上到下的原则。

图1-3 查看标识符

第三步:根据不同层次,通过树形控件的快捷菜单中的“缩进项”进行缩进。多层项目需要多层缩进。项目编辑完成后,选择合适的缩进符号。如果需要不同的项目符号,可在树形控件快捷菜单“显示项”中打卡“符号”对话框,然后选择合适的内置项目符号。效果如下图1-4所示。

图1-4 树形控件静态编辑效果

第四步:在编辑菜单中,选择“当前值设置成默认值”项,然后存储树形控件所在的VI。

这样就完成了树形控件的静态编辑。

三、树形控件的常用属性、方法和事件

树形控件包含的数据类型为字符串或者字符串数组。如果允许多选,则树形控件会返回字符串数组;反之则返回字符串。虽然树形控件的值属性会返回树,但树形控件和树形控件的值属性可以直接和字符串或字符串数组连接。连接的字符串或者字符串数组,表示选中项目的标签字符串。

树形控件的属性和方法是实现树形控件动态填充的关键,需要仔细分析和理解。

1.树形控件常用属性

编辑位置:可读可写,用于获取或者设置当前文本编辑醒目的行或列索引,索引(0,0)表示左上角项目,索引(-1,-1)表示行首和列首,索引(-2,-2)表示未选择任何编辑项。另外必须设置可编辑单元格后才能使用“编辑位置”属性。

显示层次为0的项缩进/移出符号:可读可写,用于获取或设置是否显示顶层根项的缩进/移出符号。隐藏缩进/移出符号是,缩进等级为0的项将与树形控件的左侧对齐。

缩进/移出符号类型:可读可写,用于获取或设置缩进/移出符号的类型。有效值包括0(None)、1(LabVIEW)、2(Mac OS)、3(Windows)和4(Default)。

显示的项:只读属性,用于获取所有可见项的项目标识,并按显示次序排列。未展开子项不返回。

行数和列数:读写属性,用于获取或者设置树形控件可见部分的行数和列数。

行列首字符串:读写属性,用于获取或设置行首列首字符串。

活动列数:读写属性,用于获取或者设置活动单元格所在的列。值设置为-2表示选择所有列;值为-1表示选择列首;值为0表示选择第1列。

字体:读写属性,用于设置活动单元格字体、背景颜色、对齐方式等显示效果。

单元格大小:读写属性,用于读取或者设置单元格的高度和宽度。

标识符:用于设置标识符项目为活动项目,其后所有操作针对活动项进行。

所有标识符:用于从上至下返回所有项目的标识符。

2.树形控件常用方法

排列子项:用于对某一项的子项按字母顺序进行排列。

删除项:在树形控件中删除指定项。如需删除树形控件所有相,可设置标识符为空字符串,并设置删除子项为TRUE。

添加项:在树形控件中添加指定项。

添加项到末尾:在树形控件现有项之后添加项。

添加多个项到末尾:在树形控件现有项之后同时添加多个项。

获取子项:根据给定的父项标识,获取它的第一个子项。最顶端的项没有父项,为空字符串。如果没有子项则返回空字符串。

获取最后一项:用于返回同一层次(即同属于一个父项)指定标识之后的子项标识。如不存在则返回空字符串。

获取前一项:用于返回同一层次指定标识项之前的项目。如果不存在返回空字符串。

获取父项:用于返回子项的父项,如果为空则为顶层项目。

获取路径:用于返回顶层至指定子项之间所有项的标识符字符串数组。

打开/关闭全部:用于展开或者关闭树形控件的所有节点。值为TRUE时展开所有节点,值为FALSE时关闭所有节点。

打开/关闭项:用于展开或者关闭指定项的子项。值为TRUE时展开子项。值为FALSE时关闭子项。

点到行列:用于返回像素点所在位置的标识和列,同时返回像素点是否在内容区域边界内和自定义符号内。

显示层次结构线:用于设置是否显示水平和垂直分隔线。若显示则能更清楚地显示出项目的层次结构。

3.树形控件的常用事件

树形控件中一些重要的事件为事件结构的编程提供了极大方便。如:

“编辑单元格”事件:编辑某个单元格是触发该事件,树形控件必须设置为可编辑的模式才能产生事件。

“双击”事件:双击树形控件时会发生此事件,并返回双击行的项目标识。

“项打开”事件:某个父项展开时发生的事件。

“项关闭”事件:某个父项关闭时发生的事件。

以上就可以实现树形控件的动态填充。动态填充的关键在于属性和方法的使用,其中方法节点尤为重要。下面通过一些具体范例简单介绍如何使用这些属性、方法和事件。

四、树形控件的一些应用方法

1.“删除项”和“添加多个项到末尾”方法

在树形控件填充之前,首先需要通过“删除项”方法删除树形控件中的原有项。“删除项”方法通常用于具体删除某个项。如果项目标识为空(默认)且“删除子项”输入参数设置为TRUE,则删除树形控件的所有项目。此方法多用于程序初始化时,清空树形控件。

如下图所示,“罗列文件夹与文件”函数连接的路径是“默认目录”函数,及LabVIEW.EXE文件所在目录,该函数返回指定文件下的所有文件夹及文件。图中使用了树形控件的“添加多个项目到末尾”方法,该方法的输入端子是簇数组,簇数组的元素为一个具体的项目。

树形控件项目的数据类型为LabVIEW内部自定义的簇,通过树形控件“添加多个项目至末尾”方法的快捷菜单建立常量函数,从数组中拖出一个簇元素,即可抽取这个自定义的簇类型。这是一个使用LabVIEW内部自定义类型的重要技巧。

图1-5 动态填充文件夹和文件名至树形控件

2.获取同辈项目方法

同辈项目是指具有相同父项的项目,查找同辈项目是树形控件的常用操作。树形控件提供了获取所有项目标识的属性,但没有提供获取同辈项目标识的属性和方法,需要编程实现。如下图所示,可以获取所有同辈的项目标识。

此VI的输入端子使用了树形控件引用,因此这个VI可以用于任何树形控件,首先使用“获取子项”方法取得指定了父项的首个子项,然后利用“获取下一个子项”方法,通过循环取得所有子项。如下图所示数组中“王某、范某、胡某”为父类“二班”的同辈项目。

图1-6 获取同辈项目标识VI

也可获取同辈项目标识VI创建为子VI,通过“事件结构的鼠标按下”以及“点到行列”方法获取父项标识,再通过调用该VI获取同辈中所有标识符。

3.自定义项目符号

LabVIEW本身为树形控件自定义项目符号提供了一个非常好的范例,如下图所示。

图1-7 树形控件自定义项目符号

以上学习就基本掌握了树形结构的使用,但需要熟练使用在项目中还需要仔细理解这些属性和方法。

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

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

相关文章

springboot 集成 etcd

springboot 集成 etcd 往期内容 ETCD 简介docker部署ETCD 前言 好久不见各位小伙伴们,上两期内容中,我们对于分布式kv存储中间件有了简单的认识,完成了docker-compose 部署etcd集群以及可视化工具 etcd Keeper,既然有了认识&a…

gateway的路径匹配介绍

gateway是一个单独服务。通过网关端口和predicates进行匹配服务 1先看配置。看我注解你就明白了。其实就是/order/**配置机制直接匹配到orderservice服务。 2我试着请求一个路径,请求成功。下面第三步是请求的接口。 3接口。

嵌入式中QT实现文本与线程控制方法

第一:利用QT进行文件读写实现 利用QT进行读写文本的时候进行读写,读取MP3歌词的文本,对这个文件进行读写操作。 实例代码,利用Qfile,对文件进行读写。 //读取对应文件文件,头文件的实现。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #incl…

书籍推荐:Kubernetes 修炼手册

这本书是 2020 年出版的&#xff0c;比较新&#xff0c;从 0 到 1 介绍了 k8s 中的相关技术和概念&#xff0c;翻译质量也可以&#xff0c;适合作为初学 k8s 的课外书。 书中比较关键的就是中间那几个章节&#xff0c;基本掌握 k8s 中 Pod、svc、StatefulSet、ConfigMap、Volum…

计算机网络 (29)网络地址转换NAT

前言 网络地址转换&#xff08;Network Address Translation&#xff0c;NAT&#xff09;是计算机网络中的一种重要协议&#xff0c;它主要用于将私有IP地址转换为公共IP地址&#xff0c;以实现内部网络与外部网络之间的通信。 一、基本概念 NAT是一种在局域网&#xff08;LAN&…

三极管工作状态分析

NPN三极管 下面是NPN三极管&#xff08;也称N管&#xff09;的标识和内部结构图&#xff1a; NPN三极管由两个PN结构成&#xff0c;靠近C&#xff08;集电极&#xff09;一侧的PN结称为集电结&#xff1b;靠近E&#xff08;发射极&#xff09;一侧的PN结称为发射结&#xff1…

基于RedHat9部署WordPress+WooCommerce架设购物网站

系统版本信息&#xff1a;Red Hat Enterprise Linux release 9.2 (Plow) WordPress版本信息&#xff1a;wordpress-6.6.2-zh_CN WooCommerce版本信息&#xff1a;woocommerce.9.5.1 环境架构&#xff1a;LNMP&#xff08;RedHat9nginx1.20.1PHP 8.0.27MySQL8.0.30&#xff09; …

【雷达】雷达的分类

文章目录 前言类别性质主要雷达分系统及其现代技术发展国外发展 前言 前言 类别 性质 按作用分类 军用雷达&#xff1a;&#xff08;按载体&#xff09;地面雷达、舰载雷达、机载雷达、星载雷达、 艇载雷达、弹载雷达 民用雷达&#xff1a;交通管制雷达、港口管制雷达、气象雷…

基于RK3568/RK3588大车360度环视影像主动安全行车辅助系统解决方案,支持ADAS/DMS

产品设计初衷 HS-P2-2D是一款针对大车盲区开发的360度全景影像 安全行车辅助系统&#xff0c;通过车身四周安装的超广角像机&#xff0c;经算法合成全景鸟瞰图&#xff0c;通过鸟瞰图&#xff0c;司机非常清楚的看清楚车辆四周情况&#xff0c;大大降低盲区引发的交通事故。 产…

微信小程序之历史上的今天

微信小程序之历史上的今天 需求描述 今天我们再来做一个小程序&#xff0c;主要是搜索历史上的今天发生了哪些大事&#xff0c;结果如下 当天的历史事件或者根据事件选择的历史事件的列表&#xff1a; 点击某个详细的历史事件以后看到详细信息&#xff1a; API申请和小程序…

PyCharm简单调试

本文简单讲述一下PyCharm中经常用到的调试操作。 示例代码如下&#xff1a; for i in range(10):print("hello", i)if i > 2:print("ok!")在代码前面打上断点&#xff0c;如下图所示&#xff1a; 单机调试按钮Debug 单机Resume Program按钮&#xf…

域名注册网国际域名与国内域名的区别

在当今互联网时代&#xff0c;域名注册是每个企业和个人建立在线存在的重要步骤。国际域名与国内域名之间存在一些显著的区别&#xff0c;这些区别影响着用户的选择和使用。 首先&#xff0c;国际域名通常以“.com”、“.net”、“.org”等后缀结尾&#xff0c;这些后缀具有全球…

Python 爬虫验证码识别

在我们进行爬虫的过程中&#xff0c;经常会碰到有些网站会时不时弹出来验证码识别。我们该如何解决呢&#xff1f;这里分享 2 种我尝试过的方法。 0.验证码示例 1.OpenCV pytesseract 使用 Python 中的 OpenCV 库进行图像预处理&#xff08;边缘保留滤波、灰度化、二值化、…

【Unity笔记】资源包导入后是洋红色(粉色)怎么办?

1.导入后发现是这样的 2.这个问题是渲染管道不匹配引起的。 导入的素材用的是 「通用渲染管线 Universal Render Pipeline, URP」&#xff0c;而项目里默认配置的是「内置渲染管线」&#xff0c;如图&#xff1a; 【知识补充】什么是渲染管线&#xff1f;&#xff1f;&#x…

Vue2移动端(H5项目)项目封装switch组件支持动态设置开启关闭背景色、值及组件内显示文字描述、禁用、switch 的宽度

前言 近期产品需求&#xff1a;Vue2移动端项目需要在switch开关内显示文字&#xff0c;看Vantui没有对应功能&#xff0c;因此自己手撸写了这个组件。 一、最终效果 二、参数配置 1、代码示例&#xff1a; <t-switch v-model"check"/>2、配置参数&#xff08;…

Spring Boot教程之五十一:Spring Boot – CrudRepository 示例

Spring Boot – CrudRepository 示例 Spring Boot 建立在 Spring 之上&#xff0c;包含 Spring 的所有功能。由于其快速的生产就绪环境&#xff0c;使开发人员能够直接专注于逻辑&#xff0c;而不必费力配置和设置&#xff0c;因此如今它正成为开发人员的最爱。Spring Boot 是…

概率论与数理统计--期末

概率论占比更多&#xff0c;三分之二左右 数理统计会少一些 事件之间的概率 ab互斥&#xff0c;不是ab独立 古典概型吃高中基础&#xff0c;考的不会很多 条件概率公式&#xff0c;要记 公式不要全记&#xff0c;很多有名称的公式是通过基础公式转换而来的 目的在于解决一…

大数据高级ACP学习笔记(2)

钻取&#xff1a;变换维度的层次&#xff0c;改变粒度的大小 星型模型 雪花模型 MaxCompute DataHub

标准IO

student.c用链表完成 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct student {char name[10];int chinese;int math;int English;int physics;int chemistry;int biology; }stu,*stuptr; typedef struct node {union{stu dat…

Ollama + FastGPT搭建本地私有企业级AI知识库 (Linux)

一、为何搭建本地企业级AI知识库&#xff1f; 首先我们分析下搭建本地企业级AI知识库的核心要点&#xff1a; 1.数据安全性&#xff1a;本地部署可以更好地保护企业敏感数据&#xff0c;避免数据泄露的风险。 2.定制化&#xff1a;根据企业特定需求进行定制&#xff0c;提供更…