Foxtable(狐表)用户栏目专家坐堂 → 读取菜单结构的错误提示


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

主题:读取菜单结构的错误提示

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


加好友 发短信
等级:童狐 帖子:215 积分:2149 威望:0 精华:0 注册:2018/3/30 19:56:00
读取菜单结构的错误提示  发帖心情 Post By:2022/2/18 9:12:00 [只看该作者]

想写一段代码,用来提取菜单的结构,
比如功能区,功能组,菜单按钮,还有按钮的标题,结果系统提示错误,改了几次仍然存在,不知道问题出在哪儿了,求老师指点迷津

图片点击可在新窗口打开查看此主题相关图片如下:错误提示2.png
图片点击可在新窗口打开查看

Dim dt As DataTable = DataTables("菜单结构表")

原贴代码如下
'把功能区的名称分别列入菜单表
For Each rtb As RibbonMenu.Tab In RibbonTabs  '遍历功能区,把功能区的名字加入到节点集合中
    For Each grp As RibbonMenu.Group In rtb.Groups '遍历功能区功能组集合
        For Each itm As RibbonMenu.RibbonItem In grp.Items '遍历功能组里面的所有控件
            Dim dr As DataRow = dt.addnew() '定义新加行
            dr("类型") = "功能区"
            dr("功能区") = rtb.name
            dr("功能组") = grp.name
            dr("菜单按钮") = itm.name
            'dr("菜单标题") = itm.Text '出问题的就是这个地方,想获取菜单的标题来着
            dr("菜单类型") = itm.Gettype.name
            dr.save()
        Next
    Next
Next


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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/18 9:25:00 [只看该作者]

不是所有的菜单项都有text属性,这个到帮助看看每个菜单的属性,然后区分一下:http://www.foxtable.com/webhelp/topics/2034.htm

比如:
        For Each itm As RibbonMenu.RibbonItem In grp.Items '遍历功能组里面的所有控件
            Dim dr As DataRow = dt.addnew() '定义新加行
            dr("类型") = "功能区"
            dr("功能区") = rtb.name
            dr("功能组") = grp.name
            dr("菜单按钮") = itm.name
If Typeof itm Is RibbonMenu.DatePicker orelse Typeof itm Is RibbonMenu.NumericBox orelse ......  Then
dr("菜单标题") = itm.Label
elseIf Typeof itm Is RibbonMenu.xxx
....
else
            dr("菜单标题") = itm.Text '出问题的就是这个地方,想获取菜单的标题来着
endif
            dr("菜单类型") = itm.Gettype.name
            dr.save()
        Next

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


加好友 发短信
等级:童狐 帖子:215 积分:2149 威望:0 精华:0 注册:2018/3/30 19:56:00
  发帖心情 Post By:2022/2/18 9:54:00 [只看该作者]

老师,按照您说的思路改了下代码,可是还是提示同样的错误
For Each rtb As RibbonMenu.Tab In RibbonTabs  '遍历功能区,把功能区的名字加入到节点集合中
    For Each grp As RibbonMenu.Group In rtb.Groups '遍历功能区功能组集合
        For Each itm As RibbonMenu.RibbonItem In grp.Items '遍历功能组里面的所有控件
            Dim dr As DataRow = dt.addnew() '定义新加行
            dr("类型") = "功能区"
            dr("功能区") = rtb.name
            dr("功能组") = grp.name
            dr("菜单按钮") = itm.name
            dr("菜单类型") = itm.Gettype.name
            If Typeof itm Is RibbonMenu.DatePicker OrElse Typeof itm Is RibbonMenu.NumericBox OrElse  Typeof itm Is RibbonMenu.TextBox  OrElse  Typeof itm Is RibbonMenu.TimePicker  OrElse  Typeof itm Is RibbonMenu.ComboBox   OrElse  Typeof itm Is RibbonMenu.FontComboBox   OrElse  Typeof itm Is RibbonMenu.ProgressBar OrElse  Typeof itm Is RibbonMenu.TrackBar  Then
                dr("菜单标题") = itm.Label
            ElseIf Typeof itm Is RibbonMenu.Separator
                dr("菜单标题") = itm.name
            Else
                dr("菜单标题") = itm.text
            End If
            
            
            dr.save()
        Next
    Next
Next


图片点击可在新窗口打开查看此主题相关图片如下:错误提示3.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/18 10:08:00 [只看该作者]

提示某些类型菜单没有Label属性

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


加好友 发短信
等级:童狐 帖子:215 积分:2149 威望:0 精华:0 注册:2018/3/30 19:56:00
  发帖心情 Post By:2022/2/18 10:24:00 [只看该作者]

我挨个都查看了呀,确认label属性 和text属性都分清楚了
一共16个组件,其中有8个是label 属性,7个是text属性,还有个separator  label 和text属性都没有

图片点击可在新窗口打开查看此主题相关图片如下:错误提示4.png
图片点击可在新窗口打开查看

代码也是根据查的内容写的

可是还是提示那个错误



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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/18 10:39:00 [只看该作者]

要使用变量过渡一下,RibbonMenu.RibbonItem类型是父类本身是没有这个属性的

If Typeof itm Is RibbonMenu.DatePicker Then
dim it2 as RibbonMenu.DatePicker = itm 
dr("菜单标题") = it2.Label
elseIf Typeof itm Is RibbonMenu.NumericBox
dim it2 as RibbonMenu.NumericBoxitm 
dr("菜单标题") = it2.Label
elseif ............
....
else
            dr("菜单标题") = itm.Text '出问题的就是这个地方,想获取菜单的标题来着
endif

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


加好友 发短信
等级:童狐 帖子:215 积分:2149 威望:0 精华:0 注册:2018/3/30 19:56:00
  发帖心情 Post By:2022/2/18 11:50:00 [只看该作者]

问题解决了,只能挨个设置了
测试过程中又发现几个新问题
1. FontComboBox 这个会跳出两个text属性,见附件

If  Typeof itm Is RibbonMenu.FontComboBox  Then
                Dim it2 As RibbonMenu.FontComboBox = itm
                dr("菜单标题") = it2.Text '这个地方按住精灵会出现两个text属性
end if


2.progressbar 和 trackbar 没有label 属性。但是帮助文档里提到有label 属性,是不是忘了更新了
测试截图如下

 Else If  Typeof itm Is RibbonMenu.ProgressBar  Then
                Dim it2 As RibbonMenu.ProgressBar = itm
                dr("菜单标题") = it2.Text

            Else If  Typeof itm Is RibbonMenu.TrackBar  Then
                Dim it2 As RibbonMenu.TrackBar = itm
                dr("菜单标题") = it2.Text

            end if
 另外 progressbar 和 trackbar 的Text 为啥会出错呀?
看错误提示

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

在老师的帮助下,终于完成了这个代码
大家可以参考下
Dim dt As DataTable = DataTables("菜单结构表")

'把功能区的名称分别列入菜单表
For Each rtb As RibbonMenu.Tab In RibbonTabs  '遍历功能区,把功能区的名字加入到节点集合中
    For Each grp As RibbonMenu.Group In rtb.Groups '遍历功能区功能组集合
        For Each itm As RibbonMenu.RibbonItem In grp.Items '遍历功能组里面的所有控件
            Dim dr As DataRow = dt.addnew() '定义新加行
            dr("类型") = "功能区"
            dr("功能区") = rtb.name
            dr("功能组") = grp.name
            dr("菜单按钮") = itm.name
            dr("菜单类型") = itm.Gettype.name
            
            If Typeof itm Is RibbonMenu.DatePicker  Then
'此处以下是label 属性
                Dim it2 As RibbonMenu.DatePicker = itm
                dr("菜单标题") = it2.label
                
            Else If Typeof itm Is RibbonMenu.NumericBox Then
                Dim it2 As RibbonMenu.NumericBox = itm
                dr("菜单标题") = it2.label
                
            Else If  Typeof itm Is RibbonMenu.TextBox   Then
                Dim it2 As RibbonMenu.TextBox   = itm
                dr("菜单标题") = it2.label
            Else If  Typeof itm Is RibbonMenu.TimePicker   Then
                Dim it2 As RibbonMenu.TimePicker   = itm
                dr("菜单标题") = it2.label
            Else If Typeof itm Is RibbonMenu.ComboBox    Then
                Dim it2 As  RibbonMenu.ComboBox = itm
                dr("菜单标题") = it2.label
            Else If  Typeof itm Is RibbonMenu.FontComboBox  Then
                Dim it2 As RibbonMenu.FontComboBox = itm
                dr("菜单标题") = it2.Label
'此处一下是text
            Else If  Typeof itm Is RibbonMenu.Button  Then
                Dim it2 As RibbonMenu.Button = itm
                dr("菜单标题") = it2.text

            Else If  Typeof itm Is RibbonMenu.menuButton  Then
                Dim it2 As RibbonMenu.menuButton = itm
                dr("菜单标题") = it2.text

            Else If  Typeof itm Is RibbonMenu.splitButton  Then
                Dim it2 As RibbonMenu.splitButton = itm
                dr("菜单标题") = it2.text

            Else If  Typeof itm Is RibbonMenu.toggleButton  Then
                Dim it2 As RibbonMenu.toggleButton = itm
                dr("菜单标题") = it2.text

            Else If  Typeof itm Is RibbonMenu.label  Then
                Dim it2 As RibbonMenu.label = itm
                dr("菜单标题") = it2.text

            Else If  Typeof itm Is RibbonMenu.checkbox  Then
                Dim it2 As RibbonMenu.checkbox = itm
                dr("菜单标题") = it2.text

            Else If  Typeof itm Is RibbonMenu.separator  Then
                Dim it2 As RibbonMenu.separator = itm
                dr("菜单标题") = it2.Text

            Else If  Typeof itm Is RibbonMenu.Colorpicker  Then
                Dim it2 As RibbonMenu.Colorpicker = itm
                dr("菜单标题") = it2.text

            Else If  Typeof itm Is RibbonMenu.FontComboBox  Then
                Dim it2 As RibbonMenu.FontComboBox = itm
                dr("菜单标题") = it2.Text

            Else If  Typeof itm Is RibbonMenu.ProgressBar  Then
                Dim it2 As RibbonMenu.ProgressBar = itm
                dr("菜单标题") = it2.Text

            Else If  Typeof itm Is RibbonMenu.TrackBar  Then
                Dim it2 As RibbonMenu.TrackBar = itm
                dr("菜单标题") = it2.Text

            End If                     '
            dr.save()
        Next
    Next
Next





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


加好友 发短信
等级:超级版主 帖子:110758 积分:563716 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/2/18 13:54:00 [只看该作者]

1、这个是精灵数据库的问题,没有什么影响,不用管
2、应该是帮助的问题,复制其它帮助过来的,忘记改了。

 回到顶部