在MDI框架中,若子窗口设计时指为最大化,则在子窗口的OPEN事件中明明指定this.menuid.item[1].visible = false

flyerlxg 2005-07-31 04:01:58
在MDI框架中,若子窗口设计时指为最大化,则在子窗口的OPEN事件中明明指定:
this.menuid.item[1].visible = false
但是打开后该子窗口的菜单中第一项却还在(即this.menuid.item[1]还可视),第二项却不见了(即this.menuid.item[2]不可视),如果将该子窗口设为Normal!,则一切正常。

比如我建了一个MDI窗口为w_main_mdi,其MDI菜单为:m_main_mdi,其下有四个一级菜单为:
测试1 测试2 窗口 帮助
子菜单"测试1"单击事件的脚本为:opensheetwithparm(w_sub_1,'参数',parentwindow,0,Original!)

然后建了一个子窗口为w_sub_1,其对应的菜单为:m_sub_1,其下有多个一级菜单为:
文件 编辑 查看 窗口 帮助
在w_sub_1子窗口的OPEN事件中写有代码:this.menuid.item[1].visible = false
当w_sub_1子窗口在设计时指定WindowStatus为Maximized!时,打开窗口后发现菜单"文件"还在,但"编辑"菜单却不见了。如果在设计时指定w_sub_1的WindowStatus为Normal!时,则打开窗口后"文件"菜单不可视,其它可视(后者才是正常的)。

如果指定this.menuid.item[2].visible = false,则以此类推。

请大家想想问题产生的原因及其解决的办法,谢谢!
...全文
173 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
crtdak 2005-08-01
  • 打赏
  • 举报
回复
顶,好帖
flyerlxg 2005-08-01
  • 打赏
  • 举报
回复
好,这样解决不错,即精简又明了!
spring_cj 2005-08-01
  • 打赏
  • 举报
回复
学习
dancer 2005-08-01
  • 打赏
  • 举报
回复
visible = false 不行好像从来没碰到过的。。
不过我一般都不是this.menuid.item[1].visible这样的写法
都是直接写菜单名的,不知道跟这个有没有关系
balloonman2002 2005-07-31
  • 打赏
  • 举报
回复
放分揭贴吧,:)
balloonman2002 2005-07-31
  • 打赏
  • 举报
回复
把 this.menuid.item[1].visible = false 改为:

this.menuid.item[1].hide() 即可,即使把WINDOWSTATUS设置MAX也可以正常隐藏

我在PB9下也做了测试,visible = false不行应该是PB的BUG;
flyerlxg 2005-07-31
  • 打赏
  • 举报
回复
刚才这种办法在视觉上有一定的停顿,以下是修改后的方案:
无论在设计w_sub_1时WindowStatus属性采取什么值都可以,在OPEN事件中的代码如下:
this.SetReDraw(false)
This.WindowState = Normal!
this.menuid.item[1].visible = false
This.WindowState = Maximized!
this.SetReDraw(true)

这样目的基本达到,只不过有点繁而已。各位兄弟,有没有更好的办法?
flyerlxg 2005-07-31
  • 打赏
  • 举报
回复
在上面的问题中,如果不是在窗口打开时自动运行,也就是如果将代码放在窗口的一个命令按钮的单击脚本中,又一切正常了。比如在窗口w_sub_1中增加一个命令按钮cb_1,在cb_1的单击事件中写到:
parent.menuid.item[1].visible = false
当窗口打开(此时OPEN事件中没有任何脚本,WindowStatus属性为Maximized!)后,再按cb_1,可以达到目的(隐藏"文件"菜单),但如果在OPEN事件中写到:cb_1.event post clicked()则又不行。

在以上不行的情况下,又增加一按钮cb_2,单击事件代码为:
parent.menuid.item[2].visible = false
parent.menuid.item[2].visible = true
则会发现"文件"菜单没有了,而"编辑"菜单正常了(在OPEN中触发则不行),这好象是菜单没有刷新的感觉。

目前我采取的办法是:
先将子窗口的WindowStatus属性设为Normal!,然后在刚才那句的后面加上:
this.WindowStatus = Maximized!

也就是在窗口的OPEN事件中代码如下:
this.MenuID.Item[1].Visible = False
this.WindowStatus = Maximized!

我想这不是最好的办法,不知道还有什么更好的办法,请指教。

1,077

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 相关问题讨论
社区管理员
  • 基础类社区
  • WorldMobile
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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