PB視窗之間傳遞多參數的方法
深圳:獨孤求敗 2003-11-24
在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_1,"獨孤求敗")
接著在開啟視窗w_1的open事件中鍵入:
sle_1.Text = message.stringparm
如果需要傳遞多個參數,可以使用如下兩種方法:
方法一
定義結構變數:lstr_para,其中包含你想傳遞的各種參數:
變數名 變數類型
ID string
Name string
Sex string
Loca string
在呼叫指令碼中(本例使用才菜單clicked中),使用如下代碼:
lstr_para lstr_Tranpara
lstr_Tranpara.id = "00000001"
lstr_Tranpara.name = "獨孤求敗"
lstr_Tranpara.sex = "男"
lstr_Tranpara.loca = "廣東深圳"
openwithparm(w_2,lstr_Tranpara)
接下來在開啟視窗w_2的open事件中,擷取結構資訊:
lstr_para lstr_Getpara
lstr_Getpara = message.powerobjectparm
sle_1.Text = lstr_Getpara.id
sle_2.Text = lstr_Getpara.name
sle_3.Text = lstr_Getpara.sex
sle_4.Text = lstr_Getpara.loca
其中,lstr_Getpara為使用者自訂結構資料類型,是值傳送的。
方法二
首先建立一個類使用者物件
uo_para
在該使用者物件中將你需要傳遞的各種參數申明成執行個體變數,例如:
public:
string id
string name
string sex
string loca
在呼叫指令碼中(本例使用才菜單clicked中),使用如下代碼:
uo_para uo_Tranpara
uo_Tranpara = create uo_para
uo_Tranpara.id = "00000001"
uo_Tranpara.name = "獨孤求敗"
uo_Tranpara.sex = "男"
uo_Tranpara.loca = "廣東深圳"
OpenWithParm(w_3,uo_Tranpara)
接下來在開啟視窗w_3的open事件中,擷取使用者物件資訊:
uo_para uo_Getpara
uo_Getpara = message.powerobjectparm
sle_1.Text = uo_Getpara.id
sle_2.Text = uo_Getpara.name
sle_3.Text = uo_Getpara.sex
sle_4.Text = uo_Getpara.loca
以上兩種方法比較而言,第一種方法雖然比較簡單實用,但是如果遇上較複雜的資料時,便不能在一個結構資料中充分描述了;
第二種方法不但方便靈活,而且可以傳送複雜的資料。當然,參數的傳送不止以上的幾種方法,你也可以使用全域變數或是公用可
訪問的視窗執行個體變數來傳送參數,或者在視窗中調用一個函數,並傳遞所需的參數,在此就不再贅述了。
另外,用Message傳遞參數必須注意以下幾點:
1. 最好執行完視窗操作(開啟或關閉)後馬上將Message訊息對象的值傳給變數,這是因為Message是全域使用的對象,
每一次事件被觸發或傳送時都會被使用,其他Script 也有可能用到Message訊息對象,因此它有被覆蓋的危險。
2.避免傳送NULL對象,以免程式出錯。