如何在mdi中打开一个窗口时不重复打开多余的窗口?

janewhee2001 2005-05-11 10:10:42
效果是:
打开一个窗口,如果该窗口已经被open了,那么光标定位于该窗口,而不会重新在新开一个窗口。
我在菜单项中的打开窗口代码是这样的:
window child
OpenSheet(child,"w_ghjld",parentwindow,0,original!)
...全文
153 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rightyeah 2005-05-31
  • 打赏
  • 举报
回复
楼上的办法肯定不行的。
window child
OpenSheet(child,"w_ghjld",parentwindow,0,original!)
这样的代码,child 是局部变量,打开窗口以后就被赋了一个窗口对象的引用,然后事件结束,变量被释放。而打开的窗口就无法再被引用了。
解决办法:使用全局变量或主窗口主菜单一级的实例变量数组,能够在整个程序生命期保存所有的sheet的引用。同时所有的打开sheet的动作都必须改变这个数组。
我在主窗口建立了一个实例变量window w[],和一个窗口函数,参数为as_sheetname,代码如下
//window w[]
long i,u
boolean sh
u=upperbound(w)
sh=keydown(keyshift!)
for i=1 to u
if isnull(w[i]) then
exit
end if
if not isvalid(w[i]) then
exit
end if
if (not sh) and w[i].classname()=as_sheetname then
exit
end if
next

opensheet(w[i],as_sheetname,this,1,Original! )
return 0
在pb6下通过
janewhee2001 2005-05-11
  • 打赏
  • 举报
回复
好像不行耶,我用的代码是:
if isvalid(w_ghjld) = true then
return
else
OpenSheet(child,"w_ghjld",parentwindow,0,original!)
end if
princelily 2005-05-11
  • 打赏
  • 举报
回复
在打开窗口实例的时候先要用isvalid(窗口对象名)
if isvalid(w_main) = true then
return
else
OpenSheet(child,"w_ghjld",parentwindow,0,original!)
end if
princelily 2005-05-11
  • 打赏
  • 举报
回复
OpenSheet()你写的参数有问题吧?
功能:在MDI 框架窗口中打开MDI 子窗口并在指定菜单中创建选择该子窗口的菜
语法:OpenSheet(sheetrefvar{,windowtype},mdiframe{,position{,arrangeopen}})
参数:sheetrefvar 指定要作为工作表打开的窗口名
windowtype string 类型可选项指定是要打开窗口的类型也就是窗口画
笔中保存的窗口对象名
mdiframe: 指定要放置工作表的MDI 框架窗口名
position: 可选参数指定所打开的工作表的名称作为一个菜单项显示在第几个
菜单标题下面默认时被放在倒数第二个菜单标题下原因是大多数商业
软件的最后两个菜单标题是Window 和Help 把工作表的名称放到Window 菜
单标题中用于选择工作表窗口是个合情合理的选择
arrangeopen :ArrangeOpen 枚举类型可选参数但如果选用了此参数那么
position :参数也必须同时指定arrangeopen 参数告诉系统如何显示打开的工作表

604

社区成员

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

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