編程的主要目的是為了實(shí)現(xiàn)用戶的某種功能,用戶通過(guò)用鼠標(biāo)、鍵盤(pán)、程序內(nèi)部等觸發(fā)某種程序動(dòng)作,從而達(dá)到某種結(jié)果,這些操作都被稱作為事件,LabVIEW中相應(yīng)這些事件最常用的結(jié)構(gòu)就是“事件結(jié)構(gòu)”。事件結(jié)構(gòu)內(nèi)容豐富,基本上大的程序結(jié)構(gòu)都需要用到事件結(jié)構(gòu),下面將詳細(xì)介紹事件結(jié)構(gòu)。
事件結(jié)構(gòu)在程序不能夠單獨(dú)響應(yīng)各種事件,必須與循環(huán)結(jié)構(gòu)一同使用,如下圖
事件添加方式很簡(jiǎn)單,鼠標(biāo)右鍵事件框彈出菜單如上圖,有添加、刪除、復(fù)制、編輯事件等選項(xiàng),按照操作即可。如下圖,為事件結(jié)構(gòu)添加Stop事件,布爾控件觸發(fā)事件的方式有多種,鼠標(biāo)按下、經(jīng)過(guò)、離開(kāi)、進(jìn)入等,這里我們選擇“值改變”。確定后,stop事件就被添加進(jìn)去了,如下圖,當(dāng)我們運(yùn)行程序后,點(diǎn)擊前面板的stop按鈕,觸發(fā)事件使while循環(huán)停止而后程序也停止。
同一事件分支只能添加一種事件嗎?當(dāng)然不是!有的時(shí)候有很多不同操作卻會(huì)執(zhí)行相同代碼,怎么編程才不會(huì)讓代碼冗余呢?看個(gè)例子,如下圖2個(gè)按鈕stop1,stop2點(diǎn)擊后都可以讓程序停止,我們?cè)趺礊槠涮砑邮录兀?br />
我們先添加一個(gè)事件stop1的,方法上面已經(jīng)描述了。由于stop2的執(zhí)行代碼和stop1一樣,我們?cè)谑录top1上右鍵->彈出菜單->編輯本事件分支(Edit Event Handled by This Case)會(huì)彈出已添加事件stop1的編輯框,這是左側(cè)有2個(gè)按鈕如下截圖
我們點(diǎn)擊Add Event左側(cè)事件列表會(huì)出現(xiàn)如下變化
選中這個(gè)后,右側(cè)列表選中stop2的Value Change事件后,點(diǎn)擊確定在看該事件分支如下,2個(gè)事件就添加在同一個(gè)分支當(dāng)中了,運(yùn)行程序后,點(diǎn)擊stop1或stop2均可讓程序停止。
超時(shí)
超時(shí)是事件結(jié)構(gòu)特有的,看名字就知道是怎么回事,即超過(guò)一定時(shí)間沒(méi)有觸發(fā)事件則執(zhí)行超時(shí)事件。如果超時(shí)時(shí)間設(shè)置<=-1,則永遠(yuǎn)也不執(zhí)行超時(shí)事件,循環(huán)處于空閑等待狀態(tài)。如下圖,如果設(shè)置超時(shí)時(shí)間為100,則超過(guò)100ms無(wú)任何事件觸發(fā),則執(zhí)行超時(shí)事件。
所以如果程序事件功能不多,又需要定時(shí)執(zhí)行一段代碼,可以考慮用此方式來(lái)完成;如果程序操作頻繁,則不建議用此事件來(lái)定時(shí)執(zhí)行代碼。
添加事件方法學(xué)會(huì)了,有的人在編程時(shí)發(fā)現(xiàn)點(diǎn)擊按鈕下去后,發(fā)現(xiàn)前面無(wú)法響應(yīng)其他事件了,似乎前面被鎖住了一樣,這是為什么呢?我們知道添加事件是會(huì)有個(gè)事件編輯框,上面已經(jīng)截圖了,那你有沒(méi)有注意在框體下邊有個(gè)
選項(xiàng)呢
這個(gè)選項(xiàng)的意思是:如果本事件框沒(méi)有執(zhí)行完畢前鎖定前面板??吹竭@你就應(yīng)該明白上述問(wèn)題所在了吧,所以有的時(shí)候我們果斷去掉這個(gè)選項(xiàng)。OK,問(wèn)題解決了。