【LabVIEW学习篇 - 9】:事件结构

事件结构

事件结构是一种事件驱动型的编程模式,它需要在外部事件触发的情况下才能触发程序的运行,如按钮被按下、鼠标移动等,当事件发生时,自动触发一段程序运行,即回调函数,类似于硬件中断,因此也节省了CPU资源。

基本构成:
在这里插入图片描述

静态事件

事件分类:

  1. 应用程序事件:主要是关于应用程序状态变化的一些事件,如超时、应用程序关闭等。
  2. Vl事件:反应当前VI状态变化的一些事件,如VI前面板是否关闭,是否选择了某个菜单。
  3. 动态事件:用于处理用户自定义的事件和程序运行中临时注册的事件。
  4. 窗格事件:反应窗格或分隔栏的一些状态变化的事件,如窗体大小变化、鼠标进入分隔栏等。
  5. 控件事件:这类事件最为频繁,用来处理控件状态的变化事件,如控件的值发生改变等。

按事件发生的时间分类

  • 通知型事件:可以理解成事后事件,例如一个控件的值改变事件,操作系统首先监测到键盘或鼠标的变化,然后通知前面板,等LabVIEW自身改变了控件的值后,最后才产生“值改变”事件。
  • 过滤型事件:可以理解成事前事件,在LabVIEW处理事件之前,首先将权力交给开发人员,来决定事件是否继续或终止。过滤型事件的名称以问号结束。

静态事件案例

案例:当鼠标进入数值输入控件时,改变其控件的文本背景颜色,否则2秒后其数值输入控件中的值自动加1。

  1. 在程序框图中放置while循环结构和事件结构,在前面板中放置数值输入控件和停止按钮。
    在这里插入图片描述

  2. 添加事件分支,设置数值控件的事件为鼠标进入,再添加一个事件分支,设置停止按钮的事件为值改变,最后设置超时事件为2s。
    在这里插入图片描述
    在这里插入图片描述

  3. 在程序框图中,鼠标右键-应用程序控制-属性节点,转化为写入,然后与控件引用连接,接着点击属性-数值文本-文本颜色-背景色鼠标右键-对话框与用户界面-颜色盒常量,最后将颜色盒常量与随机数相乘,连接到属性节点中。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  4. 设置停止事件和超时事件。
    在这里插入图片描述
    在这里插入图片描述

  5. 运行结果。
    在这里插入图片描述
    在这里插入图片描述

动态事件

动态事件只有注册之后才可以使用。
在这里插入图片描述

案例一

案例一:使用注册事件,当点击选中复选框按钮时,实现鼠标进入数值输入控件时文本背景颜色发生改变,当取消选中复选框按钮时,实现鼠标进入数值输入控件时文本背景颜色不会发生改变。

  1. 在前面板中,创建数值输出控件和停止按钮,然后鼠标右键-经典-经典布尔-系统复选框,选择复选框按钮;在程序框图中放置好while循环结构和事件结构,并设置好“停止”事件分支。
    在这里插入图片描述
    在这里插入图片描述

  2. 在程序框图中,鼠标右键-对话框与用户界面-事件-注册事件,选中数值控件,鼠标右键-创建-引用,将数值的引用与注册事件连接,然后选择其事件为鼠标进入。
    在这里插入图片描述

  3. 鼠标选中while循环结构,然后添加移位寄存器,接着选中事件结构,鼠标右键-显示动态事件接线端,这时,再添加事件分支,可看到有动态事件。
    在这里插入图片描述
    在这里插入图片描述

  4. 然后在 <数值>:鼠标进入 的事件分支中,设置数值输入控件文本背景颜色变化的操作。
    在这里插入图片描述

  5. 继续添加事件分支,设置复选框的事件为值改变,并在该事件中放置条件结构,最后设置复选框起始为选中状态,相应的设置如下图所示。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 运行结果如下。
    在这里插入图片描述
    在这里插入图片描述

案例二

案例二:在案例一的基础上增加值改变的注册事件,当数值输入控件中的值发生改变时,则弹出窗口,显示数值控件中的值。

  1. 在注册事件的控件中往下拉,即可增加注册事件,并将事件修改为值改变即可。
    在这里插入图片描述
    在这里插入图片描述
  2. 添加事件分支,添加动态源为 <数值>: 值改变。
    在这里插入图片描述
  3. 在程序框图中,鼠标右键-字符串-数值/字符串转换-数值至十进制数字符串转换,将其与新值连接起来,接着鼠标右键-对话框与用户界面-单按钮对话框,将其与数值至十进制数字符串转换连接。
    在这里插入图片描述
  4. 运行结果如下。
    在这里插入图片描述
    在这里插入图片描述

用户事件

用户事件是一种特殊的动态事件,它是通过“创建用户事件”节点来创建的,而事件的产生是由开发人员在编程中决定何时产生此事件的,最后需要去销毁。
在这里插入图片描述

案例

案例:使用用户事件,当字符串中的值发生改变时,弹出对话框,并显示字符串。

  1. 创建一个字符串显示控件和停止按钮,并在程序框图中设置好“停止”事件分支。
    在这里插入图片描述
  2. 在程序框图中,鼠标右键-对话框与用户界面-事件-创建用户事件,再放置注册事件,将其连接起来,最后连接到事件结构的动态事件接线端上。
    在这里插入图片描述
  3. 添加事件分支,创建动态事件为 <字符串>: 用户事件,并创建单按钮对话框将其与字符串连接到一起。
    在这里插入图片描述
  4. 添加事件分支,为 “字符串”: 值改变 事件,放置产生用户事件控件,并与新值和创建用户事件的接线端进行连接。
    这样的目的是,当字符串中的值发生改变时,则进入到该事件分支中,触发产生用户事件,接着再进入到用户事件的分支中。
    在这里插入图片描述
  5. 最后运行结束需要销毁注册事件和用户事件。
    在这里插入图片描述
  6. 运行结果。
    在这里插入图片描述
### LabVIEW事件结构的使用方法 #### 一、LabVIEW 事件结构概述 LabVIEW事件结构用于响应各种类型的事件,这些事件可以来自前面板控件的操作、定时器触发或其他特定条件。事件结构允许程序根据发生的事件执行不同的操作[^1]。 #### 二、创建并配置事件结构 为了在 VI (虚拟仪器) 中添加事件结构: 1. 打开函数选板,在 **编程** 类目下找到 **结构** 子类目中的「事件结构」图标,并将其放置到程序框图中。 2. 右键单击事件结构边框上的空白处,选择 **编辑事件列表...**, 此时会弹出对话框让用户指定要监听哪些对象及其关联的事件类型。 3. 添加所需监视的对象(如按钮、滑动条等),以及对应的事件种类(按下、释放、数值改变等)。对于每一个选定组合,都能够在事件框架内编写专门处理逻辑代码片段。 #### 三、具体实例展示 下面给出一段简单的例子来说明如何利用事件结构实现交互功能: 假设有一个带有两个输入控件(数字旋钮和字符串输入框)及一个显示标签的面板界面;当用户调整任意一项参数之后,希望自动更新标签内容为两者拼接而成的新文本串。 ```labview // 前面板设计部分省略... // 程序框图区域布局示意如下: // 放置好事件结构后, 对其内部做进一步设置: // 配置监听源为目标控件们各自的 "值变化" 事件. // 接着分别针对每种情况定义具体的动作流程. Case Structure // 根据不同组件产生的事件进入相应分支 Case: 数字旋钮 Value Change Event Fetch the new value from numeric control and convert it into string format; Concatenate this number-string with current text inside String Control; Update Label Indicator using updated combined message; Case: 字符串输入框 Value Change Event Get modified content directly since its already in proper type; Combine existing numeral part plus fresh inputted phrase together as one sentence; Refresh Text shown on label accordingly by setting property node output to aforementioned composition; End of Event Structure ``` 上述伪代码描述了一个典型的应用场景:每当检测到来自界面上任一组件的数据变动信号,则立即启动对应子例程完成信息同步刷新工作。实际开发过程中应当依据项目需求灵活调整细节之处。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

街 三 仔

你的鼓励是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值