hur.cn - 华软网

 热门搜索

一个关于菜单的问题,请高手指点

  作者:未知    来源:网络    更新时间:2018/12/6
在一个MDI窗体中有2个子窗体:w_child1,w_child2,在窗体w_child1的Open事件中:changemenu(m_child1),窗体child2没有菜单,MDI窗体有一个菜单为:m_main。
我先opensheet w_child2,此时MDI窗体上方的菜单为仍为m_main,我再opensheet w_child1, 菜单变为m_child1,我再关闭w_child1,此时菜单变为m_child1而不是m_main,只有关闭w_child1后才变回m_mian,请问这是什么原因,如何在w_child1不关闭时把菜单便会m_main(希望不运用changemenu)
------华软网友回答------
上面写的有点毛病,重写一遍:
在一个MDI窗体中有2个子窗体:w_child1,w_child2,在窗体w_child1的Open事件中:changemenu(m_child1),窗体child2没有菜单,MDI窗体有一个菜单为:m_main。
我先opensheet w_child2,此时MDI窗体上方的菜单为仍为m_main,我再opensheet w_child1, 菜单变为m_child1,我再关闭w_child1,此时菜单变为m_child1而不是m_main,只有把w_child2也关闭后才变回m_mian,请问这是什么原因,如何在w_child1关闭而w_child2不关闭时把菜单变回m_main(希望不运用changemenu)

------华软网友回复------
child如果没有菜单,那就默许运用parent的,
所以你只需给w_child2一个m_main菜单不就好了。
------华软网友回复------
但在这里奇怪的就是w_child2运用的不是parent的菜单m_main,而是w_child1的菜单m_child1
------华软网友回复------
如果打開的子窗體(w_child2)沒有菜單的話,菜單欄會默認為當前菜單,既你最近运用的菜單(m_child1)
------华软网友回复------
如果在设计时就指定w_child1的menuname,而不是运用changemenu改变的话,关闭w_child1后w_child2运用的菜单是parent的菜单m_main,而不是m_child1,但这里在w_child1的open事件中运用了changemenu(m_child1),关闭w_child1后w_child2便运用了m_child2,而不是m_main不知为什么?
------华软网友回复------
楼主的做法我没有实践过,不过对于一般的应用来说,是不需要运用changemenu的
------华软网友回复------
适才试验了一下,确实如楼主所说的。在这里有一点要注意的是:w_child1必需不指定menuname,然后用changemenu的时候,才会出现这类效果。一但指定了menuname,那么w_child1关闭的时候照旧会自动改变菜单的。另外,打开了两个sheet后,就算切换sheet,其菜单也是不变的。
我还另外试了试在w_child2上加了个按钮,执行parent.changemenu(m_sheet2),这时2个sheet都是用changemenu来绑定菜单,其结果就是关闭sheet2,保留sheet1的时候,菜单也是不转变的。而且切换2个sheet的时候,菜单一直不变。
我的结论是:pb系统在措置惩罚mdi框架的菜单的时候,
1、优先显示当前sheet的菜单,若没有当前sheet,则显示框架的菜单。
2、若是在sheet之间切换(这里的切换,不单单指用ctrl+tab换当前sheet,还包括打开新sheet,关闭某个sheet),每一个sheet自己来实现菜单的改变,其实就是由sheet自己在获得焦点的时候,把菜单酿成自己的菜单(若框架获得焦点,也就是所有的sheet都关闭了,就由框架自己设置菜单)
3、各sheet改变菜单的依据就是:menuname的值,如果没有指定menuname,那么它就什么也不做了。
4、对楼主的建议,就是不要在open里面写changemenu,而是写在activate事件里面,这才是合适的地方
     
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。