我有一個接收兩個引用路徑作爲輸入的子。 該子項目是根據第一個項目改變第二個路徑的值。 (它添加了用戶選擇的文件夾)可以認爲第一個路徑引用是真正的輸入,第二個是輸出。 (認爲C:將指針傳遞給應該由函數修改而不是返回值的東西)如何觸發子變量中的值更改事件,該事件引用了可能的更改值?
說我插入根目錄,vi將子目錄寫入第二個路徑引用。
"/" -> subvi -> "/subdirectory/"
這工作正常。
現在我想將這些子VI鏈上的兩個在一起,使用戶可以選擇一個文件夾結構的兩層,就像這樣:
"/" -> subvi1 -> "/subdirectory/" -> subvi2 -> "/subdirectory/subsubdirectory/"
只是要清楚:本是同子VI,二手在子面板中的同一個主vi中兩次。
連鎖vis不按預期工作。 每個子項都註冊第一個路徑引用的值更改事件。我這樣做的動機是通知任何後續的子實例,其根路徑的值發生了變化。
subvi1中進行的更改應該反映在subvi2中,以便subvi2在subvi1中選擇的路徑上運行。 更改事件不會觸發。並沒有反映出subvi1的變化。
這是因爲我有路徑引用作爲輸入?向他們添加一個值變化事件意味着引用必須改變才能引發它,事實並非如此。如果是這樣,如何添加一個更改事件到引用引用的內容而不是引用本身?
我過度使用參考? 我應該只使用路徑而不是路徑的引用嗎?
請看看下面的圖片,它顯示瞭如何創建兩個子視圖並將其推入到子面板中。
而且一些更多的信息,我希望這有助於。
每個子視圖只是爲它接收的第一個路徑引用的更改事件添加一個案例。
當通過參考設置您的值時使用值(信令)。這種價值變化會產生價值變化事件。 並通過值(信令)將結果寫入第二個參考。 我懷疑這是問題出在哪裏,因爲它改變了引用內容的值,而不是引用本身。
值更改事件從不執行。
LabVIEW沒有引用路徑。我假設你是指一個路徑控件的引用(它也跟蹤你正在談論的值變化事件)。
好的,我濫用術語。我很抱歉有任何混淆。是的,我的意思是對路徑控制的引用。
如果您確實需要將消息作爲消息傳遞(例如,如果您有並行進程),我會建議使用其他機制,比如用戶事件,而不是值更改事件。 VC事件可以工作,但它們是爲UI使用而設計的。以編程方式使用它們可以使你的代碼變得複雜。
我確實需要這個並行,因爲我有2個子。這是多麼的複雜?我通過了一個即將改變的參考,就是這樣。 If the information should go the other way, from main, to subvi, the suggested solution from national instruments is also to pass a reference as can be seen in this tutorial.
你只在登記事件後,已經發生了
我不知道這是如何,因爲這兩個子VI堅持主。我可以反覆點擊它們,這應該反覆發生變化事件。
它可能會使它更清晰一些,包括你試過的代碼片段 – Swinders