Foxtable(狐表)用户栏目专家坐堂 → 请教:如何遍历菜单得到狐表所有菜单项目的名称?


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

主题:请教:如何遍历菜单得到狐表所有菜单项目的名称?

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


加好友 发短信
等级:狐神 帖子:4759 积分:34603 威望:0 精华:0 注册:2008/8/31 22:44:00
请教:如何遍历菜单得到狐表所有菜单项目的名称?  发帖心情 Post By:2019/8/22 7:53:00 [只看该作者]

如题。
以下代码可以得到第一级项目的名称,如何获得全部菜单项目的名称?
For Each rb As RibbonMenu.Tab In RibbonTabs
    For Each gp As RibbonMenu.Group In RibbonTabs(rb.name).Groups
        For Each itm As RibbonMenu.RibbonItem In RibbonTabs(rb.name).Groups(gp.Name).Items
            Output.Show(rb.name & "-" & gp.Name & "-" & itm.Name)
        Next
    Next
Next

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/22 9:31:00 [只看该作者]

需要使用递归

For Each rb As RibbonMenu.Tab In RibbonTabs
Output.Show(rb.name)
    For Each gp As RibbonMenu.Group In rb.Groups
Output.Show(gp .name)
        For Each itm As RibbonMenu.RibbonItem In gp.Items
Output.Show(itm .name)
--------在递归中实现
        For Each itm2 As RibbonMenu.RibbonItem In itm.Items
            Output.Show(itm2.Name)
        Next
---------
        Next
    Next
Next


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


加好友 发短信
等级:狐神 帖子:4759 积分:34603 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2019/8/22 10:00:00 [只看该作者]

折腾了很久,未搞定。
定义了一个“全部菜单项目”的函数,代码如下。
Dim rb As RibbonMenu.Tab = args(0)
Dim gp As RibbonMenu.Group = args(1)
Dim itm As RibbonMenu.RibbonItem = args(2)
For Each rb In RibbonTabs
    'Output.Show(rb.name)
    For Each gp In rb.Groups
        'Output.Show(gp .name)
        For Each itm In gp.Items
            'Output.Show(itm .name)
            'Output.Show(rb.name & "-" & gp.Name & "-" & itm.Name)
            '--------在递归中实现
            Functions.Execute("全部菜单项目",rb,gp,itm)
            'For Each itm2 As RibbonMenu.RibbonItem In itm.Items
            'Output.Show(itm2.Name)
            'Next
            ''---------
        Next
    Next
Next

调用时出现了死循环项目闪退,没折了,请蓝帮忙。

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/22 10:13:00 [只看该作者]

--------只有这段代码需要放到函数中
        For Each itm2 As RibbonMenu.RibbonItem In itm.Items
            Output.Show(itm2.Name)
        Next
---------

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


加好友 发短信
等级:狐神 帖子:4759 积分:34603 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2019/8/22 10:21:00 [只看该作者]

提示:
---------------------------
错误
---------------------------
编译错误:'Items' is not a member of 'RibbonMenu.RibbonItem'.


错误代码:For Each itm2 As RibbonMenu.RibbonItem In itm.Items
---------------------------
确定   
---------------------------


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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/22 10:32:00 [只看该作者]

判断一下菜单类型,可以有下级菜单的,才进入递归

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


加好友 发短信
等级:狐神 帖子:4759 积分:34603 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2019/8/22 10:50:00 [只看该作者]

问题是:这个函数的代码都过不去

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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/22 10:56:00 [只看该作者]

都说了先判断,再进入函数呀

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


加好友 发短信
等级:狐神 帖子:4759 积分:34603 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2019/8/22 11:16:00 [只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:1566443644(1).png
图片点击可在新窗口打开查看
这是我定义函数的代码,这个代码就不能成功创建函数,也就无法到后面的进入函数了。

实在是搞不定,啰嗦了。


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


加好友 发短信
等级:超级版主 帖子:110738 积分:563610 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/8/22 11:38:00 [只看该作者]

先转换为对应的类型再用呀,类似这种

For Each c As WinForm.Control In e.Form.Controls
    If
 Typeof c Is WinForm.TextBox Then '判断控件是否是文本框
        
Dim t As WinForm.TextBox = c '使用特定类型的变量引用控件
        t.Value = 
Nothing
    End
 If
Next

 回到顶部
总数 11 1 2 下一页