需要在程序中根据用户权限,确定菜单的内容。所以,需要动态生成菜单。
网友
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编辑过]