PB PowerBuilder多窗口之间传递参数的方法
一、基本方法
定义全局变量,主窗口、子窗口都可以直接对它操作;
注意:全局变量值为主\子窗口最后赋值的值
二、PowerBuilder函数
在PowerBuilder中函数OpenWithParm,CloseWithReturn,OpenSheetWithParm,windowname.OpenUserObjectWithParm等都有一个在进行窗口操作时存入Message消息对象的参数parameter或returnvalue。
消息对象Message有三个属性用于存储这些函数传递给窗口的数据,根据parameter/returnvalue参数的类型与使用的Message对象属性的对应关系如下表:
参数类型 | Message对象属性 |
Numeric(数值) | Message.DoubleParm |
PowerObject(PB对象,包括用户自定义的结构数据类型) | Message.PowerObjectParm |
String(字符串) | Message.StringParm |
2.1 传递一个参数
在调用脚本中,可以使用如下代码:
openwithparm(w_1,"要传递的信息")
接着在打开窗口w_1的open事件中可以通过message.stringparm获取。
2.2 传递多个参数
方法一
定义结构变量: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
三、注意事项
1.最好执行完窗口操作(打开或关闭)后马上将Message消息对象的值传给变量,这是因为Message是全局使用的对象,每一次事件被触发或传送时都会被使用,其他Script 也有可能用到Message消息对象,因此它有被覆盖的危险。
2.避免传送NULL对象,以免程序出错。