如何在点击Response Window关闭按钮时刷新另一窗口?(PowerBuilder 12.5)
在PowerBuilder 12.5中实现响应窗口关闭时刷新其他窗口
嘿,这个需求在PowerBuilder 12.5里实现起来相当顺手,我给你拆解成几步,照着做就行:
核心思路
通过传递窗口引用的方式,让响应窗口明确知道要刷新的目标窗口是谁,然后在响应窗口的关闭事件里调用目标窗口的刷新逻辑。
步骤1:打开响应窗口时传递目标窗口引用
假设你要刷新的主窗口是w_main,响应窗口是w_response。在w_main里打开响应窗口的代码改成这样:
w_response lw_response // 把当前w_main的实例作为参数传给响应窗口 OpenWithParm(lw_response, this)
步骤2:在响应窗口中定义接收引用的变量
在w_response的实例变量区域(记得选中“Instance Variables”标签)添加一个窗口类型的变量:
window iw_target_win // 存储要刷新的目标窗口引用
步骤3:在响应窗口的Open事件中获取引用
在w_response的Open事件里,取出传递过来的主窗口引用并赋值:
// 从消息对象中获取传递的窗口实例 iw_target_win = Message.PowerObjectParm
步骤4:在响应窗口的关闭事件中触发刷新
你可以根据需求选择触发时机:
- 若想在用户点击关闭按钮、窗口即将关闭时触发,用
CloseQuery事件; - 若想在窗口完全关闭后触发,用
Close事件。
这里以Close事件为例,添加代码:
// 先判断目标窗口是否还存在,避免报错 if IsValid(iw_target_win) then // 调用目标窗口的自定义刷新函数(假设你已经封装了uf_refresh_data()) iw_target_win.uf_refresh_data() // 如果是直接刷新DataWindow,也可以直接写: // iw_target_win.dw_data.Retrieve() end if
额外注意事项
- 如果直接操作目标窗口的控件(比如DataWindow),要确保控件的访问权限是
Public,否则会触发权限错误; - 一定要用
IsValid()判断窗口引用,防止目标窗口已被关闭导致运行时异常; - 如果响应窗口是通过
Open()打开的,也可以用ParentWindow属性获取父窗口引用,但这种方式灵活性不如传递参数高。
内容的提问来源于stack exchange,提问作者SchleierUhu
相关产品推荐
相关产品推荐

