有很多软件都是先仿真,然后通过菜单选择显示不同的仿真结果。
前面提到列表框控件具有符号项,同样,树形控件也具有符号项,由于树形结构的特点,常用来做菜单选择。
主要分 为三步骤一种通过树形控件控制显示不同波形的方法。只要修改波形数据就能用于显示不同的波形。效果如下:
知乎视频www.zhihu.com下面介绍具体实现步骤
主要分为三步骤
第一、初始化树形控件和波形图控件
第二、改变树形控件的符号项,代表选择和不选择
第三、根据树形控件的各项的符号来判断在波形图上显示哪几条波形
下面是初始化部分:
先创建树形控件和波形图控件的引用(注意:鼠标放树形控件上右键创建的属性节点和调用节点为非严格类,鼠标放树形控件的引用上创建的属性节点和调用节点为严格类。同样鼠标放创建的严格类的调用节点或属性节点上右键创建的属性节点和调用节点也是严格类。可以通过严格类的引用来强制属性节电和调用节点的执行顺序)
这里我们删除项的调用节点就是非严格的,(采用严格的可以通过引用强制最先执行)后面的都采用严格的。先通过调用节点删除所有项(删除项不填就是默认删除所有),随后选择调用节点添加多个项至末尾创建多个项。(这样省的一个一个创建)该调用方法有六个参数,第六个参数glyph Index其实就是符号项(和表格控件的符号项一样)。
初始化完数型控件就可以将引用传进while循环
同样创建波形图的引用,创建调用方法重新初始化为默认值,将波形图清空
第二步是改变树形控件的符号项
创建while循环,循环里面放事件结构。添加停止按钮以及响应的停止事件确保。
在事件结构里面放一个顺序结构,总共两帧,第一帧为就是改变树形控件的符号项,第二帧为根据树形控件的符号项来选择要显示的波形。
同前面介绍的列表框控件修改符号项的方法一样,我们添加事件结构,事件源为树形,事件为鼠标按下。创建严格引用调用(后面不在说明严格不严格,二者都可以)点到行列,前面初始化的引用传到点到行列的引用,并且输出引用继续往下传(严格类型都需要引用,这里我们主要为了强制执行顺序,后面不再介绍引用的输入输出)。点到行列和列表控件的点到行列几乎一样,列表控件输出的行是数值,这里则是输出文本标识符Tag,代表行。同样需要点击在符号里面。
设计思路是首先判断我们所点击的项是父项还是子项如果是父项则把父项符号改变的同时,把所有的子项符号也改变。如果点击的是子项,则首先把子项的符号改变。还有种情况,假如我们把所有的子项都选中了,那和点击父项把所有子项选中效果一样,所以需要把父项符号也改为选中。
如下所示,通过条件结构判断点击的是符号,将引用和tag传进条件结构,调用获取父项的调用方法,如果点击的是最左边的父项,说明没有父项,则会返回空字符串,说明我们点击的是父项。接下来要做的是将全部的子项符号改变。
由于没有直接获取全部子项的功能,所以我们只能通过获取子项来获取该父项下的第一个子项。
然后再通过调用方法获取下一项来获取该子项的下一项。假如我们该子项后面没有子项了,则获取下一项会返回空字符串,所以可以利用while循环,当Navigat Tree.Get Next返回空字符串时停止循环。通过移位寄存器不断获取下一个子项的标识符,再把所有的标识符通过索引作为数组输出,由于这样输出的数组还缺少第一个子项标识符,所以需用通过创建数组连接输入第一个子项标识符和while输出的标识符数组。
接下来该父项标识符和它所有的子项标识符都获得了,就可以通过输入标识符来改变该项的符号了。首先判断父项的符号是多少,作为条件结构输入,先改变父项标识符,然后通过for循环通过索引输入,把获取的子项标识符数组的所有项符号都改变。注意:由于该数组最后一项为空字符串,而ActiveItem Tag的输入不能为空字符串,所以不能用索引数组来作为for循环的循环条件,不能省略for循环的N。切不可将空字符串传入活动项的标识符属性输入。故需要对子项标识符数组调用获取数组大小再减1输入给N作为循环次数。用for循环一次修改子项的符号项。最后将引用传给顺序结构下一帧(不传给下一帧也可以,因为顺序结构本就按帧顺序执行)
假如点击的是子项则可以直接把子项的符号改变。随后再判断是否所有的子项都是选中状态,如果是,则把父项的符号也改成选中状态,否则父项不选中。
因为不知道我们点击的是第几项子项,所以需要通过获取该项的父项,再获取该父项的所以子项,判断子项是否为选中状态。
在这里可以判断连接创建的子项标识符数组索引输入的是否为空字符串来结束for循环。
如果不为空说明是子项,挨个判断子项符号是不是未选中,假如有一个判断的子项是未选中,则父项也未选中立刻结束while循环。
假如判断的子项为选中,则父项也为选中继续判断下一项子项符号状态。直到所有子项判断完都是选中状态则通过空字符串结束while循环。
第三步:根据选中项来显示波形
假如在第二步修改符号的时候就选则显示什么波形的话,会使得代码的移植能力很差也会使结构更复杂,所以我们在符号修改后去判断哪些项被选中了,然后显示选中的波形。
下面是顺序结构第二帧,该引用从前面一帧传过来,其实不需要,直接再创建一个树形结构的引用即可。具体思路是从上到下判断所有的项的符号项是不是选中状态。
同样是先获取父项的每个子项的标识符并创建数组然后依次判断每个子项符号,在这里因为我们是根据选中的子项的标识符来决定显示哪个波形,所以直接把子项的标识符作为条件结构的条件输入,在判断符号为选中状态时直接输出该波形。对于默认状态以及符号项为未选中状态则给波形图输入为0常量(通过右键创建的波形常量默认为0)
如有错误,敬请指正。谢谢!!!
附上源码
复制这段内容后打开百度网盘手机App,操作更方便哦 链接:https://pan.baidu.com/s/1k2S7DMlTNRY1a2iR8fexnA 提取码:x6j7