以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [请教] 关关于菜单的设计问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=116607) |
-- 作者:sywmbk -- 发布时间: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() \'解锁主窗口 菜单表的格式如下: [此贴子已经被作者于2018/3/28 10:11:59编辑过]
|
-- 作者:有点甜 -- 发布时间:2018/3/28 10:10:00 -- 在你的开发版项目、菜单设计那里,加入3个或以上菜单选项,即可。不然无法响应click事件的。 |
-- 作者:sywmbk -- 发布时间:2018/3/28 11:08:00 -- 啊... 这样啊.... 我添加了三个菜单项,结果还真起作用了。 是的,每次在打开菜单设计并关闭的时候都提示要加入三个或以上的项来着的,就是没有想到是有这样的规定啊。 折腾了两天了。 只是,我的系统菜单又不见了... ^shift+F12,也调不出来...
|
-- 作者:有点甜 -- 发布时间: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 -- 发布时间:2018/3/28 15:26:00 -- 感谢,已经实现菜单从数据表自动生成的功能,我再修改一下,加上权限判断要不要输出菜单项,就可以了。 为了调试时方便,我临时加了几个按钮,方便切换用户菜单和系统菜单。 测试了一下发布,跟期望的功能基本一致。 感谢技术支持! 希望狐表加强一下用代码生成菜单的功能,如果能够直接去定义菜单项所执行的代码就好了,现在的动态生成自定义方程的办法,感觉挺绕的。这次我遇到的麻烦,主要是作为新手的我不知道用户菜单的最少项目的限制,折腾了很久。
|
-- 作者:有点甜 -- 发布时间:2018/3/28 15:38:00 -- 回复5楼,为什么要动态生成?不是控制本来菜单的显示即可?
比如是用户1、显示菜单1、菜单2;如果是用户2、显示菜单3、菜单4。。。不需要动态生成吧? |
-- 作者:sywmbk -- 发布时间:2018/3/29 12:09:00 -- 你说的倒也是一种办法。 可能是我形成思维惯性了,一时还真不好改。 你的方法,在人员相对较多,权限管理相对比较复杂,又需要经常对权限修改的时候,代码会比较长,后期维护也会比较麻烦。 我再把生成的代码优化一下,如果稳定可靠,就把方法和代码都公布出来。 最后,谢谢你的帮助。 |
-- 作者:有点甜 -- 发布时间:2018/3/29 12:17:00 -- 以下是引用sywmbk在2018/3/29 12:09:00的发言:
你的方法,在人员相对较多,权限管理相对比较复杂,又需要经常对权限修改的时候,代码会比较长,后期维护也会比较麻烦。
不会的。菜单是相对固定的,把权限配置在表格里面即可,类似
http://www.foxtable.com/webhelp/scr/1600.htm
|