PB事件 函式的觸發機制和觸發方式

2022-02-23 04:31:10 字數 2797 閱讀 2732

pb作為windows下的乙個非常便捷的db開發工具,有著和windows一樣的訊息觸發機制

pb提供了相應event/function觸發機制和觸發方式,使用者可以根據自己的實際需要選用不同方法。

1. 觸發機制 trigger/post

使用trigger會即時觸發event/function;

使用post的時候則有所不同,系統會將event/function放在訊息佇列中,等待排在前面的event/function完成後才會執行,因為這個訊息佇列實現先進先出。

預設情況下系統以trigger方式觸發event/function

什麼情況下該用trigger,什麼情況下該用post?這裡舉個例子簡單說說。

舉例:當實現某一功能a的時候會觸發某個事件/函式(a), 在這個a事件要去觸發某個功能b的事件/函式(b)以及功能c的事件/函式c。

當b無需在a之後就能拿到滿足的條件,這個時候採用trigger;

但c必須在a完成後才拿到足夠的條件,這個時候採用post.

-- 假設

當某sle在獲得焦點的時候,如果有許可權修改的話就高亮顯示,如果沒有權的修改的時候就返回。

getfocus事件是獲得焦點功能觸發的,uf_check()函式能夠檢查許可權,selecttext函式能將text高亮顯示

-- 分析

uf_check()函式已經獲得足夠的條件,selecttext必須在a完成後才能觸發或者不觸發。

所以在這裡uf_check()可以直接trigger(預設觸發方式);selecttext()就需要使用post,讓其排在getfocus()之後執行

-- 結果

if uf_check() = true then

post selecttext(1, len(this.text))

end if

-- 總結

採用哪一種觸發機制可以充兩方面考慮:

a) 從觸發物件考慮。

觸發物件需要馬上執行的應當採用trigger; 

觸發物件必須在某個事件/函式之後才能觸發的,但必須在這個時候去完成觸發動作的,採用post.

b) 從觸發源考慮。

充當觸發源的事件/函式在某特定功能中屬於是功能完成前事件/函式的時候,應當採用post;

如果屬於功能完成後的事件/函式,採用trigger.

2. 觸發方式 

pb也為event/function提供了幾種觸發的方式

a) obj.triggerevent(event_id) / obj.postevent(event_id) -- 只用於事件

這一類觸發方式多用於pb提供的系統event, 也可以用於觸發不帶引數的使用者事件(user event). 或許會有疑問,為什麼會常用於觸發系統事件?

個人理解是這樣的,系統事件多為帶引數的事件,用obj.triggerevent(event_id) / obj.postevent(event_id)可以省去為這些事件準備引數的工作。如果使用者事件沒有帶引數的,也可以使用這類方式去觸發。

b) obj.[trigger/post] [event/function] event_id/function_id(args) --  用於事件/函式

這一類觸發方式多用於觸發帶引數的使用者事件/所有函式, 也可以用於不帶引數的使用者事件/系統事件。

其實這類觸發方式還可以這樣寫

obj.[event/function] [trigger/post] event_id/function_id(args)  

我們可以用說明方式來描述這種觸發方式:obj.[觸發機制] [觸發機制] [觸發物件](引數). [觸發機制]預設的是trigger, [觸發機制]預設的是函式, [引數]可選。

也就是說,我們如果不寫trigger/post,就會預設採用trigger機制。我們如果沒有宣告[觸發機制],系統會理解[觸發物件]為某一實體函式。如果[觸發物件]是事件,那麼就必須宣告[觸發機制]為event.

舉例說明:現有函式 uf_test(args) 和事件 ue_test(args)。我們可以採用以下方式來觸發它們:

obj.trigger event ue_test(args) / obj.post event ue_test(args)

obj.event trigger ue_test(args) / obj.event post ue_test(args)

obj.event ue_test(args)         / 沒有對應的post方式

obj.trigger function uf_test(args) / obj.post function uf_test(args)

obj.function trigger uf_test(args) / obj.function post uf_test(args)

obj.uf_test(args                   / obj.post uf_test(args)

c) 動態事件和函式

為什麼將動態事件/函式納入某一種觸發方式?其實所謂的動態觸發的事件/函式也是某一object的實體事件和函式,但在觸發的時候是未知的。

第一種觸發方式其實也可以觸發未知的事件,但僅限於事件,而且是不帶引數的事件。在這個時候就需要有一種更加靈活的觸發方式來達到觸發未知事件或者函式的目的。

這類的觸發方式可以混合第二中使用,但在這裡就不詳細解析了。以下是動態事件/函式觸發方式的舉例寫法。

obj.dynamic event event_id(args)

obj.dynamic function_id(args)

動態觸發的事件/函式可以是實體事件/函式,也可以沒有這個事件/函式。如果找不到這個事件/函式,系統會預設跳過,不會報錯。這類方式適當運用可以起到很好的效果

PB事件 函式的觸發機制和觸發方式

pb作為windows下的乙個非常便捷的db開發工具,有著和windows一樣的訊息觸發機制 pb提供了相應event function觸發機制和觸發方式,使用者可以根據自己的實際需要選用不同方法。1.觸發機制 trigger post 使用trigger會即時觸發event function 使用...

mina IoHandler 事件觸發機制

乙個新的connection被建立時,會觸發sessioncreated事件。對於tcp來說,這個事件代表連線的建立 對於udp而言,它代表收到了乙個udp資料報。這個方法可以用作初始化session的各種屬性,也可以用來在乙個新建的connection上觸發一些一次性的行為。i o process...

事件觸發函式

事件 就是發生的事情 事件驅動 指發生了某件事情之後,要處理的過程 常見的滑鼠事件 onclick 滑鼠單擊 ondblclick 滑鼠雙擊 onmousedown 滑鼠按鍵按下 onmouseup 滑鼠按鍵抬起 onmousemover 滑鼠在元素上移動 onmouseout 滑鼠移出 onmou...