2010-09-24 44 views
3

這是一個PowerBuilder問題。我正在使用PowerBuilder 12 Classic。將事件添加到動態聲明的控件

我有一個窗口,其中大部分控件是在使用OpenUserObject的代碼中動態聲明的。當單擊其中一個控件時,面板應該在容器窗口中打開。但是,我不確定如何從動態聲明的控件觸發事件。控件類型是自定義的(標準可視對象中的自定義代碼,singleLineEdit),並且我在控件的getfocus事件中聲明瞭自定義代碼。但是,我如何引用容器窗口?

我知道我可以通過名稱引用容器窗口,但這是非常自我限制的。有沒有其他方法可以實現這一點?

回答

2

如果你不需要通過你可以使用parent.triggerEvent("event_name")火窗口事件參數。如果在窗口的祖先中定義了事件或函數(例如PFC),則可以將parent轉換爲祖先類型並直接調用。使用PFC例如:

w_master w_container 

w_container = parent 
w_container.of_SetUpdateObjects({this}) 
1

使用自定義對象GetFocus事件中的parent.dynamic。 parent關鍵字將引用該控件的容器,並且使用dynamic關鍵字將允許您調用容器上的任何自定義函數或事件。例如:

parent.dynamic uf_OpenPanel(ls_SomeArg) 
+0

我如何在沒有使用DYNAMIC關鍵字的情況下生活這麼久?!?謝謝! – 2010-09-28 18:26:16

1

,我喜歡用被添加一個方法來用戶對象,用於設置到父窗口的引用,然後存儲在用戶對象的實例變量的參考的另一種技術。您仍然可以使用動態關鍵字,並使您的參數和實例變量泛型'窗口'

如果您具有複雜的自定義視覺控件與多個級別的視覺控件(例如tab - > datawindow ),父項可能不一定是父窗口,您需要將事件向後吹。它不一定比前面的例子更好,但有助於添加到您的編程技術庫中。

後立即創建那麼你的自定義對象進行函數調用,如:

窗口LW

LW =此 iuo_customcontrol.uf_setparent(LW)

在自定義控件,添加實例變量和功能/事件: 保護: 窗口iw_parentwindow

新功能:uf_setparent(窗口as_window): iw_parentwindow = as_window

然後在自定義對象的任何控制使用實例變量作出動態函數調用到父窗口

iw_parentwindow.EVENT動態ue_retrieve() 或 iw_parentwindow.dynamic wf_retrieve()