6.3 事件结构与程序界面

事件结构是与条件结构类似的一种结构。它们的区别在于:事件结构是根据发生的事件决定执行哪一个分支中的代码的。

 

 

按照产生源来区分事件的种类

 

 

<应用程序>

应用程序事件,这类事件主要反映整个应用程序状态的变化,例如程序是否关闭,帮助窗口的状态是否有变化,是否超时等。

<本 VI>

本 VI 事件,这类事件反映当前 VI 状态的改变。如,当前 VI 前面板的大小是否被调整,是否选择了菜单中的某一项等。

动态

动态事件,用于处理用户自己定义的或在程序中临时注册的事件。

窗格

窗格事件,包括与某一窗格有关的事件,比如鼠标进入离开窗格等

分隔栏

分隔栏事件,包括与分隔栏相关的事件,比如鼠标拖动分隔栏等。

控件

控件事件,包括与界面上控件相关的所有事件,比如控件的值被改变等。这是最常被处理的一类事件。

编辑事件

条件结构中的条件标签是直接写入的,而事件结构中的事件标签则必须通过编辑事件对话框来编辑。

编辑事件时,首先要在“事件源”栏中选择一个事件源,比如某一控件;再在“事件”栏中选择该事件源所产生的需要被处理的事件,比如选择事件源“开关”中的“值改变”事件。选中的事件会出现在“事件说明符”一栏中。

 

 

 当用户点击“停止”按钮时,“停止”布尔控件的值发生变化,它会发出一个“值改变”事件。事件结构捕获到这一事件后,立刻运行事件结构中处理“停止”控件值改变事件的分支。执行完这一分支,整个程序也就运行结束了。

 

按照发出时间区分事件的种类

按照事件的发出时间来区分的话,LabVIEW 的事件可分为通知型事件和过滤型事件(过滤型事件的名称之后都有一个问号,比如“鼠标按下?”事件。)

 过滤型事件比相应的通知型事件要先发出

举一个实例来说明:编写一个程序,主界面有一个字符串控件,用于输入电话号码。电话号码仅由数字和横线组成,控件对其他按键无反应。

 

 

通知型事件发生时,它会被同时发往所有的事件结构

而过滤型事件发生时,它只被发送到某一个事件结构分支,待该事件结构运行处理完成后,再把该事件发往另一事件结构。

通常情况下,程序极少会只需要处理一个事件。程序总是需要处理运行过程中不断放出的各种事件,所以事件结构通常会被放在一个 while 循环结构内。我们把这种一个事件结构外套一个 while 循环结构的程序模式成为“循环事件结构”

 尽量避免在同一 VI 上使用多个事件结构。实际上每个 VI 中只需有一个事件结构就可以处理所有的事件了。

 

事件结构的使用(循环事件结构)

 

 增加事件结构优化无效时间

 

 

 

 

 :: 机械动作菜单上第二排的前两种机械动作)的按钮,每次按下只会发出一个“值改变”事件,自动回复的过程,虽然它的值改变了,但却不会发出相应的“值改变”事件,

 

循环事件结构非常适合应用于界面编程,所以它是 LabVIEW 中最常见的程序模式之一。

动态事件

与动态事件相关的节点位于 "编程 -> 对话框与用户界面 -> 事件" 子函数选板。

用于注册事件的节点是“注册事件”(Register For Events)节点。

注册事件节点可以注册两种事件,

一是 LabVIEW 自产的事件,包括我们前面介绍过的所有的应用程序事件、VI 事件、窗格、分隔栏和控件事件;(LabVIEW 自产的事件。这些事件均可在编辑事件对话框中直接选择。除“动态”这一项以外,可以直接在编辑事件对话框中选择的事件都属于静态事件。静态事件只能是本 VI 的对象发出的事件。)

二是用户自定义事件。

 

编写一个 VI,在 VI 的面板上点击鼠标时,显示出鼠标所在的坐标,并且在子 VI 中处理所有的事件。

 

 

 

 

 

一个 VI(子 VI)监视和控制另一个 VI(主 VI)的控件,那就必须提供一种机制,让子 VI 可以找到并控制主 VI 上的控件。在 LabVIEW 中,可以为控件产生一个“引用”。(“引用”是一个 4 字节的数据)

 

控件是一个比较复杂的对象,由数据以及各种属性组成。要是在 VI 间直接传递所有这些内容,效率肯定不高。但如果使用一个 4 字节的简短数据来表示它,只传递这 4 个字节,效率就高多了。

选择“创建 -> 引用”,即可为控件创建一个引用。把某个控件的引用传递给子 VI,子 VI 就知道了存储这个控件所有信息的内存地址,也就可以对这个控件进行控制操作了

 

posted @ 2022-10-09 20:34  StudySong  阅读(495)  评论(0)    收藏  举报