如何使用上層VI的Control

我想將一個常用的功能寫成獨立的SubVI,裡面需要將上層的Tab Control內每個Tab的Controls一一列出,但我不曉得該如何把上層的Tab Control傳給SubVI(或SubVI該怎麼取得上層的Tab Control)。

煩請各位先進不吝指導小弟,謝謝!

你可以利用 Controller 的 reference 去取得相關的 Propoerty Node 或 Invoke Note,來完成需求。

以本例來說,先取得Table 的 Page 的 Reference 再去取得每個 Page 的 reference,進而去控制之。

範例程式:test for Getting Ctrls on Table Pages.zip





順便說明一下兩個點:

  • 怎麼知道這些功能位於何處?  就從 Controller 的 Property Node 及 Invoke Node 一個個去拉出來看,或是查閱 Help 檔中的 Property and  Method Reference 章節。
    這些功能所在位置並不是隨便亂編排的,其實常去玩,久了也會比較會知道從哪裡找起,

  • 怎麼快速做出做出一個可重覆使用的 subVI ? 把所要的功能圈選起來,
    (如圖中的虛線部分。)
    再在 Menu -> Edit -> Create Sub VI ,並該 subVI 編輯存檔即可。

Airbolt39406.7103009259

非常感謝Airbolt用心的指導,可否再請教一下,在SubVI中開頭的那個"Tab Ctrl Refnum",在Functions Palette(或Controls Palette)好像找不到,是否一定得透過Menu->Edt->Create Sub VI才會自己生成?

你可以對 Tab Control 先以滑鼠右鍵選單製造出一個 referenece ,此時這個 reference 還不是個控制元。
這時再對這個 reference 以右鍵選單製造出一個 Controller ,就是你要的了。

而且這個 controller 是個Strictly Typed Control Refnums (controller 圖案上會有個橘紅色的星星)(相對應的是 Weakly Typed Control Refnums),詳細請參考 LabVIEW User Manual 的第 17 章的「Strictly Typed and Weakly Typed Control Refnums」在 LabVIEW 7.1 是 245 頁。

另外這兩種不同的 Refernum 有什麼樣的差異性,可以參考底下這篇文章:
主題: 如何透過CtrlRefnum取得數字Control的precision

Airbolt39408.7889583333

再次感謝Airbolt的詳細解說,讓我茅塞頓開。