以文本方式查看主题 - Foxtable(狐表) (http://www.foxtable.com/bbs/index.asp) -- 专家坐堂 (http://www.foxtable.com/bbs/list.asp?boardid=2) ---- [求助]动态生成多级菜单 (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=139653) |
-- 作者:2900819580 -- 发布时间:2019/8/18 15:52:00 -- [求助]动态生成多级菜单 cmd.CommandText = "sele ct * from {菜单管理表} where 窗体名称 = \'" & e.Form.Name & "\'"
递归代码.............问题在这里,不会调试了,请老师指点 Dim mnu As Winform.Strip |
-- 作者:有点蓝 -- 发布时间:2019/8/18 20:57:00 -- cmd.CommandText = "sele ct * from {菜单管理表} where 窗体名称 = \'" & e.Form.Name & "\' and 名称 is not null" Dim csdt As DataTable = cmd.ExecuteReader For Each cr As DataRow In csdt.Select("层数=1") Dim mnu As Winform.Strip If cr("菜单类型") = "MainMenu" mnu = e.Form.Strips.Add(cr("名称"),StripTypeEnum.MainMenu) ElseIf cr("菜单类型") = "ContextMenu" ...... End If If mnu IsNot Nothing Functions.Execute("增加菜单",mnu,csdt,cr("ID")) End If Next 函数 Dim mnu As Winform.Strip = args(0) Dim csdt As DataTable = args(1) Dim id As Integer = args(2) For Each cr As DataRow In csdt.Select("父阶id=" & id) Dim itm As WinForm.StripItem If cr("菜单类型") = "MenuItem" mnu.Items.Add(dr("名称"),dr("标题"),dr("图标") ,StripItemTypeEnum.MenuItem) ElseIf cr("菜单类型") = "Button" …… End If itm = mnu.Items(dr("名称")) Functions.Execute("增加菜单",itm ,csdt,cr("ID")) Next
|
-- 作者:2900819580 -- 发布时间:2019/8/19 13:56:00 -- .NET Framework 版本:2.0.50727.5485
老师, 递归的时候,args(0) 的类型变为了WinForm.StripItem 而不是你声明的Winform.Strip |
-- 作者:有点蓝 -- 发布时间:2019/8/19 14:18:00 -- Dim mnu As object = args(0) |
-- 作者:2900819580 -- 发布时间:2019/8/19 15:21:00 -- 老师,问题已经解决了,但是代码比较多,StripItemTypeEnum.MenuItem 这些类型好像都有对应的ID的,怎么样可以查到这些对应表,这样代码就可以简化很多了。 mnu.Items.Add(dr("名称"),dr("标题"),dr("图标") ,dr("菜单ID")) ‘下面红色的代码只用这一句就可以了
Dim mnu As object = args(0) [此贴子已经被作者于2019/8/19 15:21:39编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/8/19 16:33:00 -- 使用枚举值是个办法 For Each item As StripItemTypeEnum In [Enum].GetValues(Gettype(StripItemTypeEnum)) Output.Show(item & "-" & item.Tostring()) Next |
-- 作者:2900819580 -- 发布时间:2019/8/20 19:17:00 -- 0-MenuItem 枚举出来 MenuItem 的值是0,但是用它就没办法生成次级菜单,不知为何??? Dim cmd As new SQLCommand cmd.CommandText = "se lect * from {菜单管理表} where 窗体名称 = \'" & e.Form.Name & "\'"
函数 Dim mnu As object = args(0) For Each dr As DataRow In csdt.Select("父阶id =" & id)
[此贴子已经被作者于2019/8/20 19:17:08编辑过]
|
-- 作者:有点蓝 -- 发布时间:2019/8/20 20:38:00 -- 都没有递归,当然无法生成 函数 Dim mnu As object = args(0) For Each dr As DataRow In csdt.Select("父阶id =" & id) Functions.Execute("增加菜单id",mnu.Items(dr("名称")),csdt,dr("ID")) Next |