标题:顶层表单调用菜单怎么刷新菜单?已经自己搞定了
只看楼主
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
结帖率:98.96%
 问题点数:0 回复次数:1 
顶层表单调用菜单怎么刷新菜单?已经自己搞定了
我在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 编辑 ]
搜索更多相关主题的帖子: 用户登录 主程序 
2015-09-28 09:42
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
刚测试,我在其他表单,直接运行顶层表单的 mainform.init,是可以切换菜单,也就是更新菜单了。
我在另外的表单中,起2个按钮1和按钮2
分别测试

*按钮1 的CLICK
lp1=.f.
mainform.init

*按钮2 的CLICK
lp1=.t.
mainform.init


*在mainform.init 写上
DO MENU.PRG WITH THIS,.T.

*****带菜单的表单的做法
*****首先要建立一个顶层表单,即表单的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
*****************************************************************
**上面的代码是需要增加的代码,是带菜单的表单所要的。
*****************************************************************

DEFINE PAD _系统 OF (m.oFormRef.Name) PROMPT "系统" COLOR SCHEME 3
DEFINE PAD _数据 OF (m.oFormRef.Name) PROMPT "数据" COLOR SCHEME 3
ON PAD _系统 OF (m.oFormRef.Name) ACTIVATE POPUP 系统
ON PAD _数据 OF (m.oFormRef.Name) ACTIVATE POPUP 数据

DEFINE POPUP 系统 MARGIN RELATIVE SHADOW COLOR SCHEME 4

IF lp1=.f.
   DEFINE BAR 1 OF 系统 PROMPT "登陆1"
   ON SELECTION BAR 1 OF 系统 DO FORM FORM\LOGIN.SCX
ENDIF

IF lp1=.t.
   DEFINE BAR 2 OF 系统 PROMPT "登陆2"
   ON SELECTION BAR 2 OF 系统 DO FORM FORM\LOGIN.SCX
ENDIF

DEFINE POPUP 数据 MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF 数据 PROMPT "钞表"
ON SELECTION BAR 1 OF 数据 DO FORM FORM\抄表单.SCX

*****************************************************************
**上面两行星之间的是由向导作出菜单进编译后生成的MPR的文件部分SET SYSMENU TO和SET SYSMENU AUTOMATIC两行,
**可从生成的MPR文件中复制出再粘贴过来,注意变量 (m.cMenuName) 是菜单是名称,向导作出的一般为 _MSYSMENU,
**可用查找替换法进行替换。
**下面的代码是需要增加的代码,是带菜单的表单所要的。
ACTIVATE MENU (m.cMenuName) NOWAIT
*****************************************************************

[ 本帖最后由 mywisdom88 于 2015-9-28 14:29 编辑 ]
2015-09-28 14:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-457733-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017499 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved