2013-02-26 69 views
0

我有一個查詢,從PowerBuilder查詢祖先中的PostEvent

我有一個祖先窗口。在祖先窗口的公開活動中有一個事件。當我們打開後代窗口時,後綴將在後代窗口中工作嗎?

請任何人都可以解釋一下。

注:在後代窗口打開事件已檢查擴展的祖先腳本。

問候, Ambat

回答

0

在PowerBuilder的事件從祖先稱爲第一。所以假設你有w_grandfather => w_father => w_child,其中w_grandfather是基類(祖先)。首先,w_grandfathers事件將在此之後發生,w_father的事件在那個w_child之後。

如果您在w_father取消選中擴展祖先腳本,並且您在其中寫入腳本,則不會觸發w_grandfathers事件。首先w_fathers事件將會觸發,然後是w_child。在這種情況下,如果你想打電話w_grandfather的情況下,你必須明確寫這樣的代碼:

超級::事件的open()

還要注意,當您使用事件後您的活動將在最後一個事件後觸發在事件列表中。如果你需要「隨心所欲」:)你需要使用觸發事件。

我希望這會有所幫助。隨意問!祝你今天愉快!

Br。 Gábor

0

無論該方法是一個事件還是一個函數,無論是直接調用還是發佈,PowerBuilder都會首先在實例化的對象即子代中搜索該方法。如果發現匹配的腳本方法,PowerBuilder執行它。如果找不到方法,PowerBuilder將搜索祖先鏈,直到找到匹配的腳本方法。理解第一個腳本化的方法是被執行的,而不是其他的。 PowerBuilder通過其「擴展祖先」功能使事件混亂。如果您查看導出的語法,您將看到如果您選中此框,PowerBuilder將使用call語法在腳本的開頭插入對直接祖先的調用。這就是DARKINVADER所說的,當他說先從祖先那裏調用事件時。你應該明白,這只是因爲默認情況下,每個後代腳本正在調用它的直接祖先。如果你在祖父的腳本中放置了一個斷點,你會在調用堆棧中看到所有腳本化的後代方法。

由於PowerBuilder將調用插入幕後的祖先,因此許多開發人員並沒有意識到,當您擴展事件時,您將負責ancestorreturnvalue。如果你對ancestorreturnvalue沒有做任何事情,它將會丟失。你可以用這種方式打破框架。例如,您可以通過擴展u_dw的事件而不是正確處理ancestorreturnvalue來打破PFC鏈接服務。