Foxtable(狐表)用户栏目专家坐堂 → [请教] 关关于菜单的设计问题


  共有2951人关注过本帖树形打印复制链接

主题:[请教] 关关于菜单的设计问题

帅哥哟,离线,有人找我吗?
sywmbk
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:160 积分:1430 威望:0 精华:0 注册:2017/9/22 10:58:00
[请教] 关关于菜单的设计问题  发帖心情 Post By:2018/3/28 10:07:00 [只看该作者]

 需要在程序中根据用户权限,确定菜单的内容。所以,需要动态生成菜单。

  网友
lin_hailun图片点击可在新窗口打开查看  在帖子<[分享]从数据表生成动态菜单,让多个项目共用一个菜单。>中给出了一个办法, 我也试了,在试用版中正常,可在我的开发版中只能生成菜单项,却无法触发任何事件。请教,我该怎么做?

这是添加的主菜单的click事件:(照抄过来的)
messagebox.show("菜单项: " & e.Sender.Name)

try
  
    Functions.Remove("ExecuteMenu")
    Dim dr As DataRow = DataTables("菜单表").Find("_Identify = " & e.Sender.Name)
    Dim Code As String = dr("菜单代码")
    Functions.Add("ExecuteMenu", Code)
    Functions.Complie()
    Functions.Execute("ExecuteMenu")

catch ex As exception
   
End try

项目的AfterOpenProject 中处理菜单内容的代码如下: (照抄来的)

LockBaseMainForm() '锁定主窗口
'
'RibbonTabs.Clear
'QAT.Items.Clear
'ConfigBar.Items.Clear

'
Dim dt As DataTable = DataTables("菜单表")
For Each dr As DataRow In dt.DataRows
    messagebox.show(dr("菜单标题"))
    Select Case dr("类型")
        Case "功能区"
           
            Dim ntab As RibbonMenu.Tab
            Dim ngrp As RibbonMenu.Group
            Dim nmenu As Object
           
            If RibbonTabs.Contains(dr("功能区")) Then
                ntab = RibbonTabs(dr("功能区"))
            Else
                ntab = New RibbonMenu.Tab(dr("功能区"))
                RibbonTabs.Add(ntab)
            End If
           
            If ntab.Groups.Contains(dr("功能组")) Then
                ngrp = ntab.Groups(dr("功能组"))
            Else
                ngrp = New RibbonMenu.Group(dr("功能组"))
                ntab.Groups.Add(ngrp)
            End If
            '编译一个生成不同菜单的函数
            Functions.Remove("CreateMenu")
            Dim Code As String = ""
            Code = "Dim menu As New " & dr("菜单类型") & "(""" & dr("_Identify") & """)" & vbcrlf
            Code = Code & "Return menu"
           
            Functions.Add("CreateMenu", Code)
            Functions.Complie()
           
            nmenu = Functions.Execute("CreateMenu")
           
            ntab.Text = dr("功能区")
            ngrp.Text = dr("功能组")
            nmenu.Text = dr("菜单标题")
            nmenu.smallImage = getimage(dr("图标"))
           
            ngrp.Items.Add(nmenu)   '加入菜单
           
        Case "快速访问栏"
            '编译一个生成不同菜单的函数
            If dr.Isnull("功能区") Then
                '编译一个生成不同菜单的函数
                Functions.Remove("CreateMenu")
                Dim Code As String = ""
                Code = "Dim menu As New " & dr("菜单类型") & "(""" & dr("菜单标题") & """)" & vbcrlf
                Code = Code & "Return menu"
               
                Functions.Add("CreateMenu", Code)
                Functions.Complie()
               
                Dim nmenu As Object = Functions.Execute("CreateMenu")
                nmenu.Text = dr("菜单标题")
               
                QAT.Items.Add(nmenu)
            Else
                '编译一个生成不同菜单的函数
                Functions.Remove("CreateMenu")
                Dim Code As String = ""
                Code = "Dim menu As New " & dr("菜单类型") & "(""" & dr("_Identify") & """)" & vbcrlf
                Code = Code & "Return menu"
               
                Functions.Add("CreateMenu", Code)
                Functions.Complie()
               
                Dim nmenu As Object = Functions.Execute("CreateMenu")
                nmenu.Text = dr("菜单标题")
               
                QAT.Items(dr("功能区")).Items.Add(nmenu)
            End If
        Case "配置栏"
            '编译一个生成不同菜单的函数
            Functions.Remove("CreateMenu")
            Dim Code As String = ""
            Code = "Dim menu As New " & dr("菜单类型") & "(""" & dr("_Identify") & """)" & vbcrlf
            Code = Code & "Return menu"
           
            Functions.Add("CreateMenu", Code)
            Functions.Complie()
           
            Dim nmenu As Object = Functions.Execute("CreateMenu")
            nmenu.Text = dr("菜单标题")
            nmenu.smallImage = getimage(dr("图标"))
            ConfigBar.Items.Add(nmenu)
           
    End Select
Next

UnLockBaseMainForm() '解锁主窗口

菜单表的格式如下:

图片点击可在新窗口打开查看此主题相关图片如下:菜单设计.png
图片点击可在新窗口打开查看



[此贴子已经被作者于2018/3/28 10:11:59编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/28 10:10:00 [只看该作者]

在你的开发版项目、菜单设计那里,加入3个或以上菜单选项,即可。不然无法响应click事件的。


 回到顶部
帅哥哟,离线,有人找我吗?
sywmbk
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:160 积分:1430 威望:0 精华:0 注册:2017/9/22 10:58:00
  发帖心情 Post By:2018/3/28 11:08:00 [只看该作者]

啊... 这样啊....

我添加了三个菜单项,结果还真起作用了。

是的,每次在打开菜单设计并关闭的时候都提示要加入三个或以上的项来着的,就是没有想到是有这样的规定啊。 折腾了两天了。

只是,我的系统菜单又不见了...  ^shift+F12,也调不出来...

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/28 12:45:00 [只看该作者]

以下是引用sywmbk在2018/3/28 11:08:00的发言:
 

只是,我的系统菜单又不见了...  ^shift+F12,也调不出来...

 

1、参考

 

http://www.foxtable.com/webhelp/scr/1466.htm

 

http://www.foxtable.com/webhelp/scr/1057.htm

 

2、你可以使用系统菜单模板

 

http://www.foxtable.com/webhelp/scr/1079.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
sywmbk
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:160 积分:1430 威望:0 精华:0 注册:2017/9/22 10:58:00
  发帖心情 Post By:2018/3/28 15:26:00 [只看该作者]

 感谢,已经实现菜单从数据表自动生成的功能,我再修改一下,加上权限判断要不要输出菜单项,就可以了。

为了调试时方便,我临时加了几个按钮,方便切换用户菜单和系统菜单。 测试了一下发布,跟期望的功能基本一致。

 感谢技术支持!

图片点击可在新窗口打开查看此主题相关图片如下:菜单.png
图片点击可在新窗口打开查看

希望狐表加强一下用代码生成菜单的功能,如果能够直接去定义菜单项所执行的代码就好了,现在的动态生成自定义方程的办法,感觉挺绕的。这次我遇到的麻烦,主要是作为新手的我不知道用户菜单的最少项目的限制,折腾了很久。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/28 15:38:00 [只看该作者]

回复5楼,为什么要动态生成?不是控制本来菜单的显示即可?

 

比如是用户1、显示菜单1、菜单2;如果是用户2、显示菜单3、菜单4。。。不需要动态生成吧?


 回到顶部
帅哥哟,离线,有人找我吗?
sywmbk
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:160 积分:1430 威望:0 精华:0 注册:2017/9/22 10:58:00
  发帖心情 Post By:2018/3/29 12:09:00 [只看该作者]

你说的倒也是一种办法。

可能是我形成思维惯性了,一时还真不好改。

你的方法,在人员相对较多,权限管理相对比较复杂,又需要经常对权限修改的时候,代码会比较长,后期维护也会比较麻烦。

我再把生成的代码优化一下,如果稳定可靠,就把方法和代码都公布出来。


最后,谢谢你的帮助。

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2018/3/29 12:17:00 [只看该作者]

以下是引用sywmbk在2018/3/29 12:09:00的发言:

你的方法,在人员相对较多,权限管理相对比较复杂,又需要经常对权限修改的时候,代码会比较长,后期维护也会比较麻烦。

 

不会的。菜单是相对固定的,把权限配置在表格里面即可,类似

 

http://www.foxtable.com/webhelp/scr/1600.htm

 


 回到顶部