<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 測試測量 > 設計應用 > LabVIEW——事件結構

LabVIEW——事件結構

作者: 時(shí)間:2017-01-06 來(lái)源:網(wǎng)絡(luò ) 收藏

事件結構

本文引用地址:http://dyxdggzs.com/article/201701/337081.htm

Event Structure 也是一種選擇結構,程序根據發(fā)生的事件決定執行哪一個(gè)頁(yè)面的程序。此時(shí),LabVIEW 的界面編寫(xiě)與 Visual Basic 的界面程序有些類(lèi)似。

一. 按照產(chǎn)出源來(lái)區分事件的種類(lèi)

按照事件的產(chǎn)生源來(lái)區分,LabVIEW有以下幾種事件:


圖1:配置事件

1.應用程序事件(),這類(lèi)事件主要反映整個(gè)應用程序狀態(tài)的變化,例如:程序是否關(guān)閉,是否超時(shí)等。
2. VI事件(),這類(lèi)事件反映當前VI狀態(tài)的改變。例如:當前VI是否被關(guān)閉,是否選擇了菜單中的某一項等等。
3.動(dòng)態(tài)事件(Dynamic),用于處理用戶(hù)自己定義的或在程序中臨時(shí)生成的事件。
4.區域事件(Pane)和分割線(xiàn)事件(Splitter)是LabVIEW 8中新添加的特性。LabVIEW 8中,用戶(hù)可以把一個(gè)VI的前面板分割成幾份,這兩類(lèi)事件用來(lái)處理用戶(hù)對某個(gè)區域或區域分割線(xiàn)的狀態(tài)的改變。


圖2:面板上劃分區域

5.控件事件(Control)是最常用的一種事件,用于處理某個(gè)控件狀態(tài)的改變。例如,控件值的改變,或者鼠標鍵盤(pán)的操作。
打開(kāi)上述的“edit events”框,只要選定了某一個(gè)事件產(chǎn)生源,其相應的所有事件均排列在右側events框中。
有時(shí)候,多個(gè)事件產(chǎn)生源會(huì )對同一個(gè)用戶(hù)操作分別產(chǎn)生相應事件。比如在某一控件上按下鼠標,區域事件和控件事件都會(huì )發(fā)出鼠標按下(Mouse Down)事件。LabVIEW 按以下規則順序產(chǎn)生不同的事件:
? 鍵盤(pán)相關(guān)的事件(Key Down, Key Up, etc.)只在當前選中(Key Focused)的控件上產(chǎn)生;
? 鼠標相關(guān)的事件(Mouse Down, etc.)按照從外向里的順序發(fā)出。例如,區域的鼠標按下事件先于控件的鼠標按下事件發(fā)出;結構的鼠標按下事件先于先于結構內控件的鼠標按下事件發(fā)出。
?值改變事件按照從內向外的順序發(fā)出。結構(Cluser)內控件的值改變事件先于結構的值改變事件發(fā)出。

二. 按照發(fā)出時(shí)間區分事件的種類(lèi)

按照事件的發(fā)出時(shí)間來(lái)區分,LabVIEW的事件可分為通知型事件(Notify Event)和過(guò)濾型事件(Filter Event)。

通知型事件是在LabVIEW處理完用戶(hù)操作之后發(fā)出的,比如用戶(hù)利用鍵盤(pán)操作改變了一個(gè)字符串,LabVIEW 在改變了該控件的值之后,發(fā)出一個(gè)值改變(Value Changed)通知型事件,告訴事件結構,控件的值被改變了。如果事件結構內有處理該事件的框架,則程序轉去執行該框架。
過(guò)濾型事件是在 LabVIEW 處理用戶(hù)操作之前發(fā)出的,并等待相對應的事件框架執行完成之后,LabVIEW 再處理該用戶(hù)操作。這類(lèi)事件的名稱(chēng)之后都有一個(gè)問(wèn)號。例如鍵盤(pán)按下?事件(Key Down? Event),當用戶(hù)處理該事件時(shí),控件的值還沒(méi)有被改變,因此,用戶(hù)可以在該事件對應的事件框架內決定是否讓 LabVIEW先處理該事件,或改變鍵盤(pán)按下的值之后再讓LabVIEW繼續處理該事件。
可以明顯地看出,過(guò)濾型事件比相應的通知型事件要先發(fā)出。
當同一VI的程序框圖上有多于一個(gè)的事件結構時(shí),通知型事件是同時(shí)被發(fā)往所有的事件結構的,而過(guò)濾型事件則是按順序、依次發(fā)往每一個(gè)事件結構的。但是,在同一VI上放置多個(gè)事件結構是沒(méi)有必要,而且極易引起錯誤的。所以應該避免在同一VI上使用多個(gè)事件結構。

下面舉例說(shuō)明如何使用通知型事件。我們經(jīng)常需要使用到這樣的字符串控件:控件用于輸入電話(huà)號碼,因此只接收數字和橫線(xiàn),對其他按鍵不起反應。LabVIEW沒(méi)有直接提供此種控件,但是它們可以利用通知型事件被方便地實(shí)現出來(lái)。


圖3:利用 Key Down? 事件實(shí)現電話(huà)號碼控件

這個(gè)例子可以在這里下載:Phone Number Control.vi

三. 動(dòng)態(tài)事件

在初始狀態(tài)下,打開(kāi)事件配置(Edit Events)對話(huà)框,動(dòng)態(tài)事件下的一欄是空的。因為動(dòng)態(tài)事件只有注冊過(guò)之后才能使用。與事件相關(guān)的操作在函數選欄的 Programming -> Dialog & User Interface -> Events 下面。
用于注冊事件的節點(diǎn)是事件注冊節點(diǎn)(Register For Events)。需要注冊某一事件時(shí),先為它的產(chǎn)生者生成一個(gè)引用節點(diǎn),然后將引用節點(diǎn)與事件注冊節點(diǎn)的下方區域相連,再選取所需的事件。如下例:


圖4:注冊動(dòng)態(tài)事件

對于當前VI上的控件或區域等類(lèi)型的事件,一般來(lái)說(shuō)可以在事件結構中靜態(tài)地被選擇,所以不需要再動(dòng)態(tài)注冊一遍。但有時(shí),當前VI的程序框圖已經(jīng)過(guò)于復雜,我們希望在子 VI 里去處理某些控件的事件。這時(shí)就可以把控件的引用傳入子 VI,在子 VI 中動(dòng)態(tài)注冊所需事件。在子 VI 的事件結構中處理相應的事件。

四. 用戶(hù)自定義的事件

用戶(hù)自定義的事件是動(dòng)態(tài)事件的一種。用戶(hù)自定義的事件不基于任何一個(gè)LabVIEW對象,它是使用創(chuàng )建用戶(hù)事件節點(diǎn)(Create User Event)生成出來(lái)的。并且,用戶(hù)可以選擇不同的事件數據類(lèi)型。

五. ActiveX控件的事件

ActiveX 控件的事件不能直接被LabVIEW的事件結構所截獲。ActiveX 事件需要用注冊事件回調 VI 節點(diǎn)(Register Event Callback)來(lái)為某一事件指定一個(gè)VI。當事件發(fā)生時(shí),執行被注冊的 VI。我們也可以利用注冊事件回調 VI 節點(diǎn)為某一 LabVIEW 自身的事件注冊一個(gè)回調 VI,但是出于運行效率,和程序可讀性等方面的考慮,最好不要這樣使用。




關(guān)鍵詞: LabVIEW事件結

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>