为什么用opensheet可以重复打开同一个窗口

VaryMissU 2006-12-12 08:31:17
我作的PB程序菜单项"采购订单"的clicked事件下打开的是从数据库中读取的窗口.代码:

//定义一个窗口变量
window lw_win

//给ls_parm赋值
ls_parm = '0101'
//将窗口名w_cgdd赋给ls_winstr
select menuname into:ls_winstr from t_func where menuid='0101'
//打开窗口,w_main为主窗口名(mdi类型)
opensheet(lw_win,ls_parm,ls_winstr,w_main,0,Original)
运行程序后,点击 采购订单菜单,打开一个窗口,再点击又会打开一个同样的窗口.
怎么控制一下,达到这样的效果,就是,当这个窗口没打开时,点击打开窗口.当这个窗口已打开时,点击不再打开,但将该窗口设为活动窗口.
...全文
268 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
rightyeah 2006-12-13
  • 打赏
  • 举报
回复
opensheet两种方式,一种是直接打开指定类型的sheet,直接把实例引用赋给同名的全局变量。系统会自动检查是否已经有同类型的实例存在(其实就是传入的全局同名变量是否有效),没有就新开一个,有就激活原有的实例
另外一种就是用字符串指定窗口类型,打开的sheet,并把实例引用赋给传入的变量中。系统只检查传入的变量中是否有一个同样类型的实例的引用,如果有,就激活原有的实例,否则就打开新的。
楼主用第二种方式打开sheet,又使用了局部变量,当然会直接打开新sheet
霖湘凝 2006-12-12
  • 打赏
  • 举报
回复
isvalid搞定
li_d_s 2006-12-12
  • 打赏
  • 举报
回复
这样是可以多次打开同一个窗口的,因为每次打开的窗口都给了不同的窗口变量,可以用isvalid判断一下是否已经打开
AFIC 2006-12-12
  • 打赏
  • 举报
回复
写反了……
if isvalid(lw_win) then
改成
if not isvalid(lw_win) then
AFIC 2006-12-12
  • 打赏
  • 举报
回复
window lw_win
定义成实例变量
if isvalid(lw_win) then
ls_parm = '0101'
//将窗口名w_cgdd赋给ls_winstr
select menuname into:ls_winstr from t_func where menuid='0101'
//打开窗口,w_main为主窗口名(mdi类型)
opensheet(lw_win,ls_parm,ls_winstr,w_main,0,Original)

end if
VaryMissU 2006-12-12
  • 打赏
  • 举报
回复
不行,照样打开多个.因为lw_win是在菜单clicked下定义的局部变量,每次都从空开始.并且我不可能把它变成全局类型的变量,因为菜单都是动态生成的,用的都是这个变量,只是从数据库里读窗口名打开不同的窗口.
VaryMissU 2006-12-12
  • 打赏
  • 举报
回复
我试试.谢谢,你们有没有PB群,有的话告诉我.我QQ:63616462
youqiong 2006-12-12
  • 打赏
  • 举报
回复
有道理
AFIC 2006-12-12
  • 打赏
  • 举报
回复
哦,你说得对,
我看他用string打开的,
想错了,555555555
rightyeah 2006-12-12
  • 打赏
  • 举报
回复
晕,用实例变量的话,根本就不需要判断isvalid,只要直接用opensheet就可以了,如果没有打开,就打开窗口,如果已经打开了,就激活窗口,

604

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 控件与界面
社区管理员
  • 控件与界面社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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