PB窗口之間傳遞多參數的方法
2024-07-21 02:10:21
供稿:網友
在powerbuilder中函數openwithparm,closewithreturn,opensheetwithparm,windowname.openuserobjectwithparm等都有一個在進行窗口操作(打開或者關閉)時存入message消息對象的參數parameter或returnvalue。
消息對象message有三個屬性用于存儲這些函數傳遞給窗口的數據(依賴于窗口操作時參數賦予的類型)。根據parameter / returnvalue參數數據類型的不同,該參數的值保存在message對象的不同屬性中。parameter / returnvalue參數的類型與使用的message對象屬性的對應關系如下表:
參數類型 message對象屬性
numeric(數值) message.doubleparm
powerobject(pb對象,包括用戶自定義的結構數據類型) message.powerobjectparm
string(字符串) message.stringparm
應用程序根據openwithparm()等函數的parameter / returnvalue參數類型,從message消息對象的不同屬性中提取該函數并傳送給被打開窗口的值。
在pb中如果是傳遞一個參數,是很容易實現的。在調用腳本中,可以使用如下代碼:
openwithparm(w—wantparm,parmtotrans)
接著在打開窗口w—wantparm的open事件中鍵入:
string ls—getparm
ls—getparm=message.stringparm
…
如果需要傳遞多個參數,可以使用如下兩種方法:
方法一
定義結構變量:lstr—declaredstr,其中包含你想傳遞的各種參數:
變量名 變量類型
id unsignedlong
name character
email character
homepage character
… …
在調用腳本中,使用如下代碼:
lstr—declaredstr lstr—parmtotrans
lstr—parmtotrans.id=1
lstr—paramtotrans.name=″panya″
lstr—paramtotrans.email=″[email protected]″
lstr—paramtotrans.homepage=″http://panya.163.net″
…
openwithparm(w_wantparm,parmtotrans)
接下來在打開窗口w—wantparm的open事件中,獲取結構信息:
lstr—declaredstr lstr—getparm
integer li—getid
string ls—getname
string ls—getemail
string ls—gethomepage
lstr—getparm=message.powerobjectparm
li—getid=lstr—getparm.id
ls—getname= lstr—getparm.name
ls—geemail= lstr—getparm.email
ls—gethomepage= lstr—getparm.homepage
…
其中ame
string email
string homepage
...
打開窗口w—wantparm,并傳遞多個參數:
u—n—parmtostore lnv_paramtotrans
lnv—paramtotrans.id=1
lnv—paramtotrans.name=″panya″
lnv—paramtotrans.email=″[email protected]″
lnv—paramtotrans.homepage=″http://pbnet.126.com″
…
openwithparm ( w—wantparm, lnv—paramtotrans )
在 w—wantparm 的 open 事件中訪問傳來的參數:
u—n—parmtostore lnv—getparam
integer li—getid
string ls—getname
string ls—getemail
string ls—gethomepage
lnv—getparam = message.powerobjectparm
li—getid=lnv—getparam.id
ls—getname=lnv—getparam.name
ls—gethomepage=lnv—getparam.homepage
ls—getemail=lnv—getparam.email
…
以上兩種方法比較而言,第一種方法雖然比較簡單實用,但是如果遇上較復雜的數據時,便不能在一個結構數據中充分描述了;第二種方法不但方便靈活,而且可以傳送復雜的數據。當然,參數的傳送不止以上的幾種方法,你也可以使用全局變量或是公共可訪問的窗口實例變量來傳送參數,或者在窗口中調用一個函數,并傳遞所需的參數,在此就不再贅述了。
另外,用message傳遞參數必須注意以下幾點:
1. 最好執行完窗口操作(打開或關閉)后馬上將message消息對象的值傳給變量,這是因為message是全局使用的對象,每一次事件被觸發或傳送時都會被使用,其他script 也有可能用到message消息對象,因此它有被覆蓋的危險。
2.避免傳送null對象,以免程序出錯。