我在XCONTROL一文中详细说明了如何利用属性和方法,通过XCONTROL的事件结构,建立XCONTROL的方法.
通过属性可以控制XCONTROL的显示状态,通过方法,可以要求XCONTROL执行动作(命令),有的时候,XCONTROL需要想调用VI发送数据或者命令,要求调用VI执行动作,如何实现这个目的,有几种方法,全局变量,队列,用户事件,使用全局变量显然是不合适的,我们用XCONTROL的目的是实现组件封装,XCONTROL的运行不应该依赖于外部变量,使用队列也有它的问题,是我们不得不专门用一个循环来处理队列,这对一个不太经常发生的数据传送 ,显然是不经济的.
今天推荐一个方法,使用用户事件.
关于用户事件,我专门有一篇文章介绍.现在的LV编程,采用事件结构越来越多,我们只需要简单地
在事件结构中增加用户接口事件就可以了.
先看看程序实现的功能

按下SnapShot(捕捉)按钮后,XCONTROL自动通过用户事件把捕捉到的图象传送到调用VI

要想调用VI响应用户事件,必须得到用户事件参考,最好的办法是通过XCONTROL的只读属性得到,这样就需要在xcontrol的STATE中定义这个属性,看一下它的状态定义:

这个用户事件的数据是一个图片框,得到这个参考是需要技巧的,我演示一下方法:

另外一种常用的方法:

首先在XCONTROL的INIT中生成用户事件

在UNINTI.VI中销毁用户事件

在FACADE.VI中发送用户事件

这样只要XCONTROL的捕捉按钮按下,XCONTROL响应这个按钮同时把图片通过用户事件发送出去.
看看调用VI是如何响应用户事件的.

文章评论(0条评论)
登录后参与讨论