(高分)变量传递问题

xiaoqiangse 2010-01-08 01:57:37
在一个窗口中,有2个userobject,uo中含有sle控件,如果uo_1的sle修改,马上传递给uo_2,我在uo_1的ke_key事件中定义uo_2.ls_tmp=uo_1.ls_tmp,ls_tmp是变量,但是每次传递都有前一次key触发的修改,只有按了回车后才是最后修改的结果,例如在sle中输入1,uo_2的ls_tmp接收到的是空,再把1修改成2,uo_2的ls_tmp接收到是1,不知道为什么,如果大家还有好的变量传递方法也请指教(不能使用全局变量)
...全文
112 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoqiangse 2010-01-08
  • 打赏
  • 举报
回复
如果用窗体,处理起来的方法当然很多,换了uo局限就太大了
xiaoqiangse 2010-01-08
  • 打赏
  • 举报
回复
pb8(痴痴):
不是问题简单,是需求复杂,我也想简单处理,没法子啊
pb8 2010-01-08
  • 打赏
  • 举报
回复
呵呵,看楼主的需求有点迷糊,很简单的功能想复杂了
xiaoqiangse 2010-01-08
  • 打赏
  • 举报
回复
回eviler(脱掉裤衩了) :
实验过了,因为uo_1中含有多个sle,用了pbm_enchange,传递结果为空,可能pbm_enchange只能对寄主的修改才有效
eviler 2010-01-08
  • 打赏
  • 举报
回复
你的代码不是写在keydown中 获取的数据都是前一次的吗 , 那你使用 pbm_emchange 这个事件id 试试
pbwubaba 2010-01-08
  • 打赏
  • 举报
回复
帮忙顶~~
xiaoqiangse 2010-01-08
  • 打赏
  • 举报
回复
回eviler(脱掉裤衩了) :
uo_1为通用查询界面 ,uo_2为另一独立查询+显示结果界面,为2个userobject,没法直接uo_2.ls_tmp = This.Text ,我是通过第三个uo,即uo_3,把uo_1,uo_2整合在一起,通过uo_1和uo_2的instance variables 中定义public string ls_tmp,在uo_3中对uo_1和uo_2的ls_tmp传递的
xiaoqiangse 2010-01-08
  • 打赏
  • 举报
回复
首先谢谢pb8(痴痴)的耐心详细回答,不过因为程序是调用现有界面开发,窗体都是uo,无法使用openwithparm(),你上边提到的继承,因为是通用窗体,我本意就是要把这个通用查询做成一个uo,然后其他查询都在此继承,ue_update方法也是不可行,效果和直接使用key事件一样,修改后不能马上同步,在按下回车后才同步
eviler 2010-01-08
  • 打赏
  • 举报
回复
在 sle_1 新增时间 en_enchange ,event_id 选择 pbm_emchange

在这个事件中写代码 ,即可 uo_2.ls_temp = This.Text

使用 keydown 事件 ,触发的时机太靠前了, sle还没收到就触发了
pb8 2010-01-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 xiaoqiangse 的回复:]
在一个窗口中,有2个userobject,uo中含有sle控件,如果uo_1的sle修改,马上传递给uo_2,我在uo_1的ke_key事件中定义uo_2.ls_tmp=uo_1.ls_tmp,ls_tmp是变量,但是每次传递都有前一次key触发的修改,只有按了回车后才是最后修改的结果,例如在sle中输入1,uo_2的ls_tmp接收到的是空,再把1修改成2,uo_2的ls_tmp接收到是1,不知?-
[/Quote]

针对你的问题,你可以在uo_1里面定义一个事件ue_update,事件id为空的,事件里面写上uo_2.ls_tmp=uo_1.ls_tmp
在keydown事件里面写上
this.Post Event ue_update()

maybe ok~~
pb8 2010-01-08
  • 打赏
  • 举报
回复
呵呵,推荐设计方式,

定义一个窗口基类w_parent,里面定义ue_find(string as_filter)事件,再定义一个实例变量
其他要调用它的窗口继承这个窗口
比如你的窗口为w_find,使用一个结构体把数据传过去
结构体内容为,us_find(
w_parent mywin
datawindow 你的数据窗口
...//其他数据窗口
)

us_find lus_find
lus_find.mywin=this
openwithparm(w_find,lus_find)


在w_find窗口中,定义一个实例变量us_find ius_find,
open事件里面
ius_find = Message.PowerObjectparm

需要同步的地方直接写就可以了,ius_find.mywin.postevent ue_find(你的数据)
xiaoqiangse 2010-01-08
  • 打赏
  • 举报
回复
补充说明:
由于可以开多个不同的查询窗口调用通用查询,所以如果使用全局变量会变得混乱
xiaoqiangse 2010-01-08
  • 打赏
  • 举报
回复
是想做一个通用查询窗口,这个窗口做成用户对象方便调用,因为查询条件随时可修改,所以该变量要修改后及时传递到显示窗口,open应该没法实现,因为那只有一次传递,ke_key的event id当然是keydown了
pb8 2010-01-08
  • 打赏
  • 举报
回复
如果只是需要访问相互之间的变量,可以写一个函数of_bind(你的对象类型),,在open事件中uo_1.of_bind(uo_2);uo_2.of_bind(uo_1),,在对象内部就可以直接访问相关对象的当前实例的变量了~~
pb8 2010-01-08
  • 打赏
  • 举报
回复
为什么要这样传递呢,存到实例变量又不是要显示
还有你的key_key事件的ID是什么?
楼主说下你的直接需求好些,貌似想复杂了~~

743

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 脚本语言
社区管理员
  • 脚本语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧