顶层表单调用菜单怎么刷新菜单?已经自己搞定了
我在Mainform.scx的INIT中DO MENU.PRG WITH THIS,.T.
问题:我用变量控制是否生成某个菜单,不是用SKIP FOR 禁用某个菜单,当我不退出的时候,换用户登录时,我需要刷新菜单,上次不生成的菜单才会生成。
我们目前的办法是,更换用户后,退出 Mainform.release,会CLEAR EVENTS, 再SYSLOGIN=.T.使DO WHILE循环进入,可以实现,但这样屏幕会闪动。。
主程序写上
DO FORM LOGIN.SCX &&正常登录后,SYSLOGIN=.T.,退出时,会CLEAR EVENTS
READ EVENTS
DO WHILE SYSLOGIN=.T.
DO FORM MAINFORM.SCX
READ EVENTS
ENDDO
能不能不退出MAINFORM直接刷新MENU.PRG???怎么做?
**MENU.PRG
*****带菜单的表单的做法
*****首先要建立一个顶层表单,即表单的ShowWindow=2,然后在该表单的Init事件中写:
*****DO MENU.PRG WITH THIS,.T.
**下面是menu.prg程序生成菜单的定义
*************************************************************************
*************************************************************************
** **
** 菜单 定义 **
** **
*************************************************************************
*************************************************************************
LPARAMETER oFormRef,getMenuName
LOCAL cMenuName && 菜单名称
IF TYPE("m.oFormRef") # "O" OR LOWER(m.oFormRef.BaseClass) # 'form' OR m.oFormRef.ShowWindow # 2
WAIT "此菜单只能被顶层表单调用!" window at 18,40 TIMEOUT 3
RETURN
ENDIF
m.cMenuName = IIF(TYPE("m.getMenuName")="C",m.getMenuName,SYS(2015))
IF TYPE("m.getMenuName")="L" AND m.getMenuName
m.oFormRef.Name = m.cMenuName
ENDIF
DEFINE MENU (m.cMenuName) IN (m.oFormRef.Name) BAR
*****************************************************************
**上面的代码是需要增加的代码,是带菜单的表单所要的。
*****************************************************************
*此位置是我的菜单,我用变量控制是否生成某个菜单
*****************************************************************
**上面两行星之间的是由向导作出菜单进编译后生成的MPR的文件部分SET SYSMENU TO和SET SYSMENU AUTOMATIC两行,
**可从生成的MPR文件中复制出再粘贴过来,注意变量 (m.cMenuName) 是菜单是名称,向导作出的一般为 _MSYSMENU,
**可用查找替换法进行替换。
**下面的代码是需要增加的代码,是带菜单的表单所要的。
ACTIVATE MENU (m.cMenuName) NOWAIT
*****************************************************************
[ 本帖最后由 mywisdom88 于 2015-9-28 14:32 编辑 ]