LabVIEW树形控件

时间:2024-03-13 12:04:51

LabVIEW 树形控件

 

/* 

7月31日更,解决了以下问题:

1、选项卡“报文日志”中的树形控件避免重复添加。方法是判断前一个节点的tag是否是已有节点的tag值(假设是Mote 1)再加上后缀"_1"(即为Mote 1_1),若存在tag为Mote 1_1的节点,调用节点方法删去该节点。

2.选项卡“网络拓扑”中节点接入与否的指示灯亮了之后又灭的问题,这个问题与解析报文显示控件簇的初始化是一个问题,解决方法是在最开始即写入字符串"CLEAR"用于表示清空显示控件簇,这样避免了使用全局变量,也避免了必须使用一个大VI的问题。

3、树形控件重复添加问题,现象是Mote 1~Mote 8没问题,然后Mote 8之后又是Mote 1。。。等等。针对这个问题,使用了“首次调用”这个控件。

 

 

*/

 

1、控件简介

    LabVIEW的树形控件以树型结构显示信息,每个节点带细节描述列。可以显示该节点的其它信息。如下图所示

LabVIEW树形控件

2、控件的常用属性、方法、事件

    控件的常用属性、方法、事件可以很方便的从LabVIEW的帮助或者编写简单的Demo获取,这里就不再赘述。

    只是有一点需要注意,控件属性结构上显示的字符是控件的Left Cell String,可以重复,再控件内部管理这些节点是用Tag属性,该属性为字符串类型,不可重复,如果增加节点时不设置该属性,LabVIEW会默认将Left Cell String作为Tag,遇到重复的情况以”下划线加数字”区分。如“张三_1”。在控件的方法、事件中获取到节点值都是控件的Tag。

3、常见操作的实现方法

3.1 增加节点

使用控件的 Add Item 方法,如图所示:

LabVIEW树形控件

如果只是增加一个节点作为树的最后一个节点,可以使用Add Item To End 方法。

3.2 删除节点

    使用控件的delete Item 方法

LabVIEW树形控件

    Delete children 代表删除父节点是否要删除子节点。如果不删除子节点,子节点将往上移动一层替代原父节点的位置。如果该节点没有子节点而要求删除,将会产生错误。所以删除时最好先检测是否有子节点。若tag连接空字符串,则删除树形结构所有节点。

3.3 节点的移动

LabVIEW 的树型结构控件节点的界面拖拽代码不需要设计者编写,只需要设置Allow

Draging ,Allow Draging of Parant Items ,Allow Draging Between Items 属性即可。

   如果在运行时需要由程序移动节点,使用方法Move Item 即可

LabVIEW树形控件

    程序中要展开,收合节点使用Open/Close方法

3.4 获取当前用户选中的节点

   要获知当前用户选中的节点需要使用该控件的事件(ValueChange)

LabVIEW树形控件

其中NewVal是当前选中节点的Tag,OldVal 是前一次选中节点的Tag

3.5 节点的查找

  LabVIEW Tree Control 提供节点的查找方法有

   

LabVIEW树形控件 Get Child

获取父节点的第一个孩子节点

LabVIEW树形控件 Get Next

获取节点同一层次的下一个节点

LabVIEW树形控件 Get Parent

获取节点的父节点

LabVIEW树形控件 Get Path

获取当前节点从上之下的父子节点关系,从顶节点开始,到目标节点的所有父系节点(包括当前节点),结果放于字符串数组中

3.6 节点的遍历

   看了节点的查找方法后,我们不禁要问,难道我要全面遍历节点需要通过这些方法来编写复杂的遍历代码吗?答案是否定的。Tree Control有个属性是Display Items ,按照先序遍历顺序将所有节点的Tag存储在字符数组中,相当于delphi Tree Control 的Items。可以通过对数组的遍历实现对树节点的全面访问。

3.7 界面显示内容操作

  前面提到了该控件内部管理树是通过Tag管理,界面显示与Tag无关,Tree Control管理界面显示的内容类似Grid,每一个格子为一个单元,可以设置其属性,也可读出值。

3.7.1 读取left Cell String 或Child Text的值

  使用两个属性节点,首先将要读取的格子置为Active(使用Active Item Properties和Active Cell Properties),再读取Active Cell String 即可。

LabVIEW树形控件

3.7.2 修给某Item的值

   如果修改Item的Tag,可以使用方法节点 Set Tag,如果修改Left Cell String或者Child Text方法有二:

方法一:将该Item删除再添加。

方法二:仿照3.7.1

        LabVIEW树形控件

3.8 控件内容运行时修改

我们不难发现,该控件可以在设计时修改值,再进行增加节点,填入节点内容等等操作,但是当程序运行时却不能由用户修改Cell里的值。也就是不具备输入功能。网站上LabVIEW官方的说法是我们目前使用的包是Base Package 。而要进行这项操作需要Full Package ,或Professional package 支持。如果项目中不需要用户在树型控件中输入就不升级了。