2016-12-17 90 views
0

嘗試從響應窗口的父窗口獲取變量(這兩個窗口都是繼承的 - 我沒有源代碼)。我能夠循環所有的父變量,對象,控件等,但我似乎無法讀取任何變量。此代碼適用於「OK事件」。感謝任何幫助。Powerbuilder 12.5獲取父窗口變量

window lw_active, w_parentwindow 
string ls_winname, ls_libname, ls_wintitle 
ClassDefinition cd_windef 


w_parentwindow = this.ParentWindow() 
lw_active = w_parentwindow.GetFirstSheet() 

if isvalid(lw_active) = True then 
     ls_winname = lw_active.classname() 

     cd_windef = FindClassDefinition(ls_winname) 
     ls_libname = cd_windef.LibraryName 
     ls_wintitle = lw_active.title 

     messagebox(ls_winname, ls_libname+'~r~n~r~n'+ls_wintitle, Information!)  

     string s, lineend 
integer li 
VariableDefinition vard 
lineend = "~r~n" 
FOR li = 1 to UpperBound(cd_windef.VariableList) 
    vard = cd_windef.VariableList[li] 
    s = s + vard.Name + lineend 
NEXT 
messagebox('s',s) 

end if 

回答

1
  1. 繼承您要訪問的窗口。我會打電話給你的後代窗口w_mine和祖先w_theirs。
  2. 將訪問器方法添加到w_mine。你將能夠引用任何不是私有的東西。
  3. 聲明一個w_mine類型的變量。
  4. 將窗口引用分配給w_mine。然後你可以調用你添加到w_mine的方法。
  5. 不要破壞w_mine。簡單地讓它超出範圍。在PB中,不需要設置變量null或做任何特殊的事情。請注意,如果關閉該窗口,則您的引用將變爲無效。我會避免使用實例變量來保存引用。
+0

謝謝你花時間休。我是一個新手程序員,所以我不清楚所有的觀點。我忘了提及,我能夠通過父窗口溝通父窗口變量通過父窗口.tag。事情是這樣的: 窗口\t lw_parentwindow \t \t \t \t lw_parentwindow =超級:: ParentWindow()getfirstsheet()\t \t \t ll_orderid = DEC(lw_parentwindow.tag) – DAMS

+0

我得到了削減後的中間,對不起。 繼續: 您能詳細說明一下「添加祖先方法到w_mine」嗎? 不知道該怎麼做。我在哪裏申報類型w_mine?在w_mine(子窗口)中? – DAMS