統一控制UI的VI

我想要讓上一次執行過的程式最後顯示的值,讓程式下一次開啟也能繼續顯示。
我會所有元件的值包成一個Cluster,寫入到txt檔,下次開啟程式再讀取近來,所以寫了下面這隻程式。

Untitled 1.viUICtrl.vi

我發現這種作法問題很大條...因為今天我的UI如果有100個控制或顯示元件....我可能要拉300條線。

所以我想請教大大們有沒有比較更好的寫法呢?

可以參考以下文章

如何將面板資訊存檔

大大您好,因為我常常會用很大量的布林元件幫助我判斷一些狀態,類似Flag的存在,可是這些元件並不會讓它顯示出來。所以不是所有的元件都要做儲存或讀取的動作,所以我想到此作法:

UI控制.vi給予我所需要儲存的元件的Name,一一讀取出來。

但是我發現一個問題..我不知道該如何將變體的資料型態轉回他原本的資料型態。

因為不同資料型態無法包成一個陣列統一送入到同一個For Loop轉型,不然我想說可以用

Variant To Data Function ![](upload://4dG5zf9V3B22138s1f94acmEKQV.png)這個元件來進行資料型態的轉換。

為何要把VI的元件的Value值,讀出來又轉回原本的資料型態,我在想可不可以設計出一個VI是可以快速讀出當前VI所有控制元件的值,並且統一回儲存起來。

以下方式提供給你參考

![](upload://zYf5Zg58Zkpr4BgGHvdPlNO5fgg.jpeg)

![](upload://tbuE6Z3pZMSqrxpuPINoXJW81JC.jpeg)

感謝大大的回覆

還是很難領悟,思維還是陷在不知道要如何將變體的陣列轉回原本的資料型態。

現在有點不確定你要的什麼,你一開始說要儲存全部的數值,後來又說不要,我一開始舉的例子是儲存全部的數值,可以選control或indicator,後來舉的例子是只儲存你想要的數值,不懂你為何想要使用Variant To Data,可否請你再詳述

[QUOTE=ancle]現在有點不確定你要的什麼,你一開始說要儲存全部的數值,後來又說不要,我一開始舉的例子是儲存全部的數值,可以選control或indicator,後來舉的例子是只儲存你想要的數值,不懂你為何想要使用Variant To Data,可否請你再詳述[/QUOTE]

大大您好,非常感謝您的回覆
我沒有解釋清楚而造成您的困擾,真的非常抱歉。

在大大給予的第一個例子,已經達到保存UI最後資訊的效果。

但是我遇到了一個問題,就是我有兩個Loop,一個類似生產者的效果,一個類似消費者的效果,生產者Loop他會去輪循UI的一些按鈕,
例如:[開始]、[計算]、[離開]‧‧‧

UI控制2.vi

假設我今天按下離開,他就會回傳到UI上另一個被我隱藏在角落當做Flag機制的Boolean元件Exit=Ture,然後消費者Loop也會去輪循這類Flag的元件,檢查程式目前的狀態或進度,類似這樣的元件的資訊都是會在UI上面,所以不能被保存以及讀取,否則下次執行程式檢查到Exit=True..就直接離開程式了....
或者是要用初始化的方法,先用大大您提的方法,將上一次執行的所有值讀取近來,然後再將一次將所有這些Flag元件用初始值重新寫入,但是這樣就等於是做兩次功!

因此我想化簡這樣存取UI資訊的流程:
方法1:只針對需要保留的UI資訊做存取,所以想請問能否選擇性存取UI資訊呢?
方法2:就是建立初始化的機制,但是這種選擇性寫入,也是沒有頭緒,我只能一個一個拉Reference+PropertyNode放到統一的VI集中,然後一個一個更改Value.然後就會發現有100個元件我就點出了100個Reference+PropertyNode+ConstantValue+200條線,點到手指都會痛!所以想請教該如何針對我要的元件做值得寫入呢?

另外聯想到一種功能,是不是可以列出一個List,這個List是任意的變數的Name,針對這個List上有的Name去存&取這個VI變數的值,而讀出來的值依然可以保持他的資料型態?

這樣的想法是說..今天如果我設計一個使用者介面,例如購物單,他可能勾選了很多種產品+數量+購買人,這時就會有三種資料型態:
勾選Boolean、數量Number、購買人String

如果我可以只傳VI的eferenve+這些需要運算&紀錄的元件的Name包成Cluster或陣列,傳送到一個子VI集中讀取值+運算,就真的達到統一讀取的效果,還可以進行後續的處理,程式看起來應該會簡單很多。(P.S.不知道這個想法整不正確,還請大大門指點迷津....)
感覺這樣做是為了增加閱讀性...效能就不知道如何了.....

有嘗試試做了一下,但讀出來的是一個變體的陣列,不知道該如何還原他原本的資料型態。
還請各位大大指點。

Lovesmartx40761.5271643519

[QUOTE=Lovesmartx]

假設我今天按下離開,他就會回傳到UI上另一個被我隱藏在角落當做Flag機制的Boolean元件Exit=Ture,然後消費者Loop也會去輪循這類Flag的元件,檢查程式目前的狀態或進度,類似這樣的元件的資訊都是會在UI上面,所以不能被保存以及讀取,否則下次執行程式檢查到Exit=True..就直接離開程式了....[/QUOTE]

針對以上部份,在程式時結束如果是使用將面板資訊儲存的方式,會在程式一開始時將面板資訊載入後,再將一些你所謂的FLAG值設為False即可