在调用XControl的外观VI中得到一个引用



主要软件:
主要软件版本: N/A
主要软件修正版本: N/A
次要软件: N/A

问题: 我试图实现当鼠标进入前面版我的XControl范围时出现变动鼠标图标的功能。我想在我的外观VI中实现这个功能,但是我必须要得到使用这个XControl的VI引用才行。我试图在外观VI中使用Call Chain.vi,但是它只是输出一个叫Proxy Caller的引用。我该如何能够得到使用这个特殊XControl的VI引用呢?

解答: 每一个XControl都有一个簇控件,叫做Container State。这个控件包括了当前XControl实例的状态,例如它是输入控件还是显示控件。这个簇也包含了XControl自己的控件引用。

你可以将这个控件引用连入一个属性节点,然后选择属性Owner 来得到该XControl属于的更上层的对象。接着你可以将这个引用连入另一个属性节点,选择属性Owning VI 来得到这个使用该特定XControl的VI引用,如下图所示。



如果你需要在你的外观VI 中频繁使用这个VI引用的话,你可以考虑将VI引用保存在显示状态簇(Display State Cluster)中,这样你就不用在每次需要使用它时再重复上述的操作了。根据一下步骤来将VI引用保存在你的Xcontrol的显示状态簇中:
  1. 在你的XControl项目库中打开状态控件文件(State Control)。该控件的缺省名称为State 1.ctl, 但是你可以将它事先保存为另一个名称.
  2. 在控件面板Modern » Refnum » VI Refnum 中选择一个VI引用控件,并将该控件放于类型定义状态簇控件中。
  3. 保存状态控件,并关闭控件编辑窗口。
  4. 打开外观VI,选择Display State Change 事件框。每次你在一个VI中放入一个新的XControl实例或打开一个使用该XControl的VI时,该事件都会触发。
  5. 接着上一步,从Container State 簇中解捆绑XControl引用,并且得到调用该XControl实例的VI引用。
  6. 使用the Bundle by Name VI 将该VI引用捆绑入 Display State 簇中,该簇应该已被更新为包括一个VI引用。
  7. 使用 the Bundle by Name VI 连接一个True常量到 Action 簇的State Changed? 元素中. 这样做将会通知LabVIEW Display State 簇中的信息已经改变,并且需要被处理.

最后的事件结构框应入下图所示:

现在你可以任何想使用VI引用的时候,从Display State 簇中解捆绑来得到.

相关链接: LabVIEW 8 Help: Using XControls
Developer Zone Tutorial: Creating New Front Panel Objects with LabVIEW XControls

附件:


Display_State_Change_Event.GIF - Display_State_Change_Event.GIF
XControl_OwningVIRef.GIF - XControl_OwningVIRef.GIF
ATTMI937 - ATTMI937



报告日期: 03/09/2006
最近更新: 09/23/2007
文档编号: 3V8B3HUM