用户自定义控件中 Control, Type Def. 和 Strict Type Def. 的区别

    为了解释清楚,先定义一下要用到的概念。我们把以 .ctl 文件名定义的控件叫做用户自定义控件,把通过拖拽或打开这个 .ctl 文件在 VI 上生成的控件叫做实例。

LabVIEW 的用户自定义控件包括了三种定义形式:打开一个 .ctl 文件,在它上方的“control”下拉条中有三个选择,分别是无关联控件(Control)、类型定义(Type Def.)或者严格类型定义(Strict Type Def.)。
无关联控件是指这个控件与它的实例之间没有任何关联。例如,你制作了一个漂亮的按钮控件保存在 .ctl 文件中。需要用到它时,通过拖拽或打开这个 .ctl 文件就可以在 VI 中生成这个用户自定义控件的一个实例。这个实例一旦生成,就和原用户自定义控件无任何关联了。无论是你修改这个实例,还是修改原用户自定义控件,都不会对另一方产生任何影响。
类型定义控件是指实例控件与用户自定义控件的空间类型是相关联的。比如,你的用户自定义控件是一个数值型控件,那么它的所有实例控件也都是数值型的。如果我们在 .ctl 文件中把用户自定义控件的类型改为字符串,那么它已有的所有实例都将自动变成字符串类型。
有时候,只是类型相关联还不够。比如对于 Ring(Enum,Combo Box)这类的控件来说,如果在用户自定义控件中添加了一项内容(item),一般总是希望它所有的实例也同时添加这一选项。如果使用类型定义控件,因为控件类型没变,还是 Ring,实例们是不会自动跟随更新的。这时就需要使用严格类型定义控件。选择严格类型定义后,不但实例与用户自定义控件的类型是相关联的,其他一些控件属性,比如颜色等等,也是相关联的。

使用严格类型定义时有一点容易被误解:严格类型定义只是与实例控件相关联,由它生成的实例常量的属性是不与之关联的。实例常量是指通过拖拽或生成常量等方法,在程序框图上生成的一个与 .ctl 文件相关联的常量。比如在 Ring 型用户自定义控件中添加了一项内容,相关的实例常量是不会发生任何改变的。很多人按常理想,认为常量也应当自动更新,但事实上不行。这也是我不采用它做常量定义的原因之一。(参见:在 LabVIEW 中使用常量定义

查看博客版《我和 LabVIEW》的其它文章

Advertisements

3 thoughts on “用户自定义控件中 Control, Type Def. 和 Strict Type Def. 的区别

  1. Pingback引用通告: 博客版《我和LabVIEW》目录 « 凡人琐忆

  2. 用严格类型定义的时候,似乎有一些控件其实例的常量也是与定义控件相关的,比如枚举型控件

    • 确实是这样的,现在的LabVIEW在这上面有点乱。Enumerate常量会变,而Ring常量不会变。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s