2011-07-21 28 views

回答

1

你需要得到datawindow.visualobjects屬性,用於列出所有可見的對象,併爲每個對象,你問object_name.band檢查,如果你想要它。

一個可重用的PbniRegex(其提供在下面的代碼的uo_regex對象)的一個例子,以簡化的屬性進行解析:

public function long of_get_band_controls (string as_band_name, ref string as_controls[]); 
string ls_empty[] 
int i, j 
as_controls[] = ls_empty[] 

uo_regex lnv_regex 
lnv_regex = create uo_regex 
lnv_regex.initialize("([^\t]+)", true, false) 
i = lnv_regex.search(describe("Datawindow.visualobjects")) 
for j = 1 to i 
    if describe(lnv_regex.match(j) + ".band") = as_band_name then 
     as_controls[ upperbound(as_controls[])+1 ] = lnv_regex.match(j) 
    end if 
next 
destroy lnv_regex 

return upperbound(as_controls[]) 
end function 

即代碼來自一個數據窗口herited對象,因此,它獲取到直接訪問describe方法。

+0

塞巴斯蒂安,AFAIK'visualobjects'由於某種原因沒有記錄,因此沒有正式支持。 [我曾問過這個問題](https://groups.google.com/d/topic/sybase.public.powerbuilder.datawindow/iZ3ZjtLQ6us/discussion)在Sybase新聞組中,並被建議不要使用它。我懷疑它會遇到什麼問題,但我認爲無論使用它的人至少應該意識到這種可能性。 – eran

+0

@eran,哦,它沒有證件?當使用[DW調試機器](http://geni.embeddingperl.com/index.php?post/2011/06/06/My-Datawindow-DebugMachine)時,它必定是我們偶然發現的一個屬性,它列出了所有dw屬性通過'datawindow.attributes'屬性。那麼,隨着PB Classic虛擬機逐漸淘汰,我認爲使用它不會有什麼壞處。 – Seki

0

我不知道的任何直接的方式來獲得該名單,但一旦你有對象的完整列表,你可以去在他們和檢查每個人的樂隊:

ls_Obj = GetNextObjectFromList(ls_AllObjectsList) 
ls_Band = dw_1.Describe(ls_Obj + ".band") 
choose case ls_Band 
    case "detail" 
    // handle detail band objects 
    case "header" 
    // handle header band objects 
    // etc. 
end choose 
+0

什麼是您在示例中使用的'GetNextObjectFromList()'?你用它來解析DW可視對象的列表? – Seki

+0

@Seki,是的。只需一個簡單的解析器即可從列表中獲取下一個對象。當然沒有這樣的內置功能。 – eran