【喂饭】MVA-S03 Labview MVA框架实例 重写事件过滤器 文件树

【喂饭】MVA-S03 Labview MVA框架实例 重写事件过滤器 文件树

【喂饭】MVA-S03 Labview MVA框架实例 重写事件过滤器 文件树

导语: MVA-S02中,我们实现状态栏的更新,数据持续采集Model与状态机Model的编写方法。本章将继续在S02的继承上,进行文件树的编写,讲解事件过滤器的重写以及ViewManager的嵌套。本系列文章采用MVA-SXX编号,可顺序查看。 为什么要重写事件过滤器,我们在注册树的快捷菜单时,发现重写结束注册快捷菜单事件vi并无法编辑快捷菜单内容!本文将会讲解为什么以及如何解决。


📑 文章目录

🔹 1. 创建FileTree_Viewable,Config_ViewManager,实现文件树的显示 🔹 2. 注册Tree的快捷方式激活?重写事件过滤器,实现快捷菜单激活 🔹 3. 实现菜单的打开与新建功能 🔹 4. 入门总结


1. 创建FileTree_Viewable,Config_ViewManager,实现文件树的显示

1.1 打开自己写的MVA-S02MVA子面板切换项目,也可以公众号发送[MVA]获取。

rId21-20260419210837-iaxc71e.png

1.2 我们先来创建FileTree_Viewable,此viewable用来加载文件目录下的文件,右击文件实现创建文件夹,创建文件,打开文件。这是我们Labview中经常要用,复用高的界面。

rId24-20260419210837-npqmuj5.png

1.3 重写actor core,界面上放置好看的树,设置自动匹配窗格

rId27-20260419210837-et57grk.png

1.4 将树的引用与文件地址 名称 放置到私有数据中。新建静态FileTree init.vi,实现用来加载文件目录下的文件显示到树中。

rId30-20260419210837-63m35et.png

rId33-20260419210837-0qu4yhv.png

二级的文件目录索引

rId36-20260419210837-qh13o90.png

重写插入子面板,将刚刚写的初始化放入,当插入前面板时执行。

rId39-20260419210837-aqu6cx7.png

1.5 我们新建一个ViewManager,功能是读取配置文件,就叫Config_ViewMangaer,重写Actor Core,进行界面设计。左侧是子面板,右侧是多列表,底部是保存按钮,使用窗格隔开。

rId42-20260419210837-tjtypja.png

rId45-20260419210837-labwhsf.png

1.6 重写初始化前面板

rId48-20260419210837-pkm1zal.png

1.7 修改上下双子面板ViewManager,增加文件树按钮,注册值改变事件,值改变事件不需要修改,报错值更新,由Main_Viewmodel进行数据发布

rId51-20260419210837-d3965qr.png

rId54-20260419210837-qz3sdvr.png

1.7 进行Launcher的编写,复制之前的进行修改

rId57-20260419210837-vxcgqau.png

首先通过ViewManger的配置,将Filetree进行组合

rId60-20260419210837-8zbjouu.png

然后将Config_ViewManager作为View加载静默启动中,最后加载到上下双子面版_ViewManager中。ViewManager也是View,是很好的面板组合器,我们要多合理使用ViewManager与View实现多种页面形式。

需要将FileTree的路径和名称写入最后完整的启动器

rId63-20260419210837-rkgl6d9.png

运行

rId66-20260419210837-onzhrnz.png


2. 注册Tree的快捷方式激活?重写事件过滤器

2.1进行快捷方式激活?事件注册

rId70-20260419210837-4lxwp3v.png

rId73-20260419210837-e0nm2r9.png

2.2 重写接受快捷菜单激活?

rId76-20260419210837-61i3oka.png

rId79-20260419210837-3r0nmls.png

2.3此处确实拿到了菜单的引用,并且可以进行菜单设置,我们运行程序,看看是否有作用

rId82-20260419210837-2hvghri.png

2.4我们发现并不生效,打开调试,进行探针查看

rId85-20260419210837-sijwnei.png

rId88-20260419210837-dgyz7lu.png

事件是正常触发的。

2.5代码解析(不必理解,看不懂的过一下,知道有这个东西)

打开事件处理部分

rId91-20260419210837-yedv42m.png

当树触发快捷菜单激活是,进行进行打包数据,打包数据发送之前,会根据Event Filter的类型,工厂模式获取Event Filter的数据

rId94-20260419210837-2zkot2g.png

而快捷菜单的设置必须要在是否放弃之前完成,也就是说再发送过来之后再设置已经为时已晚了

rId97-20260419210837-nvta4d3.png

2.6我们需要重写Event Filter类中的过滤快捷菜单激活事件来实现快捷菜单。

我们新建Event Filter 库,进行普通的类Event Filter,右击属性继承IeventFilyer.lvclass

rId100-20260419210837-4xj3q3c.png

2.7 右击Event Filter,选择重写Filter Shortcut Menu Activation Event.vi

rId103-20260419210837-hq3zciv.png

rId106-20260419210837-kal9jwu.png

私有数据里放入菜单项,生成写入读取vi,进行重写。

rId109-20260419210837-gfk6iqj.png

2.8 回到Actor Core处,注册菜单激活的地方,需要将刚刚重写的Event Filter使用起来,需要使用这个打开事件过滤器引用。

rId112-20260419210837-bbksu34.png

rId115-20260419210837-41idmil.png

2.9 移除之前重写的接受菜单激活事件,已经不需要了。然后运行。

rId118-20260419210837-m3qq2pf.png


3. 实现菜单的打开与新建功能

3.1 注册树按下事件与快捷菜单用户选择事件。

rId122-20260419210837-t4c1lc0.png

3.2 当按到选择框进行选择框切换

rId125-20260419210837-vnn256x.png

3.3 当选择打开,将当前选择的文件路径发送值更新,Main_ViewMode到文件File_Model(还没有创建现在)

rId128-20260419210837-48soy3s.png

3.4 创建File_Model,接受到文件路径之后,进行打开发布数据即可

rId131-20260419210837-rq6hdny.png

rId134-20260419210837-gug8r73.png

3.5 Config_ViewManager进行订阅,观察数据之后显示到列表中。

rId137-20260419210837-9ou9yod.png

rId140-20260419210837-542cxe3.png

3.6 进行Launcher编写,加入刚刚编写的File_Model,运行

rId143-20260419210837-8fyo7mp.png

3.7 新建的功能此处不赘述,不是本文重点,但功能已经实现,源码自己查看。

4. 入门总结

很多人觉得MVA比较难,资料少。不必强求,适合自己的就是最好的。但是如果你是想学面对对象编程,想知道Actor封装的妙处,MVA是一个顶级的框架,甚至很多时候我觉得封装的有点多了。真心想学的人,进行该系列的文章手把手自己写,边看边写。慢慢用到自己的项目上来。用熟练了之后,再去看实现方式,然后想如果自己想实现这样的功能可以怎么做?

📢 获取方式: 关注微信公众号:「G 代码思维」,在后台发送暗号: 【MVA】 ,即可原版源码。

点个【赞】和【推荐】 ,咱们下期见!

🔒
⭐ VIP 极客会员专享

试读已结束,解锁完整内容与工程源码

本文包含 LabVIEW MVA 框架完整实战源码包、架构逻辑导图与核心技术细节。升级会员即可解锁全站 VIP 专栏!

关注微信公众号「G 代码思维」回复【验证码】获取 4 位登录码
免费解锁 12 大章节、52 张高清架构示意图全本内容

💬 极客讨论区 (0)

欢迎发表技术见解、解耦思路或留言交流

🐻