以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助] 遍历状态按钮后,Pressed 属性不好用?  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=130360)

--  作者:龙潭春早
--  发布时间:2019/1/19 23:47:00
--  [求助] 遍历状态按钮后,Pressed 属性不好用?
在一个功能区中,有多个功能组,每个功能组里都加有不少的状态按钮。
希望点击任何一个状态按钮时,其它按钮都被排斥而自动弹起,所以给所有的状态按钮都设置了相同的分组名。

但是测试的时候发现,同一功能组内的状态按钮工作正常;但是,不同功能组内的状态按钮却并不是互相排斥的。
如果每次点击不同功能组中的一个状态按钮,那么有多少个功能组,就有多少个状态按钮呈现 “ 按下 ” 状态。

所以,想在每个状态按钮的 click 事件中设置代码,先分别遍历各个功能组中的所有状态按钮,将其设置成 “ 弹起 ” 状态,再将要点击的动态按钮设置成 “ 按下 ” 状态。

状态按钮C1 中的代码:

Dim itm As RibbonMenu.RibbonItem

For Each itm In RibbonTabs("功能区A").Groups("功能组B1").Items
             itm.Pressed = False
Next

For Each itm In RibbonTabs("功能区A").Groups("功能组B2").Items
             itm.Pressed = False
Next

RibbonTabs("功能区A").Groups("功能组B1").Items("状态按钮C1").Pressed = True

执行这段代码,说是 itm.Pressed = False 出错,奇怪啊!

不应该吧? 要怎么改呢?

图片点击可在新窗口打开查看此主题相关图片如下:状态按钮 - 遍历后,使用 pressed 出错.png
图片点击可在新窗口打开查看




--  作者:有点甜
--  发布时间:2019/1/20 11:18:00
--  

Dim itm As RibbonMenu.RibbonItem

 

改成

 

Dim itm As Object


--  作者:龙潭春早
--  发布时间:2019/1/20 18:50:00
--  
还是不对,改后测试,显示这个:

图片点击可在新窗口打开查看此主题相关图片如下:状态按钮 - 遍历后用 pressed 出错 2.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2019/1/20 23:06:00
--  

参考代码

 

Dim itm As object
For Each itm In RibbonTabs("功能区A").Groups("功能组B1").Items
    If Typeof itm Is RibbonMenu.ToggleButton Then
        msgbox(123)
    End If
Next


--  作者:龙潭春早
--  发布时间:2019/1/22 10:44:00
--  
嗯 能用了

不过,有没有什么更简化一些的办法,直接遍历一个功能区里所有功能组中的各个组件,而不用一个个功能组的遍历呢?

--  作者:有点甜
--  发布时间:2019/1/22 11:07:00
--  

比如

 

For Each r As RibbonMenu.Tab In RibbonTabs
    output.show(r.text)
    For Each g As RibbonMenu.Group In r.Groups
        output.show(g.text)
        For Each c As object In g.Items
            output.show(c.name)
        Next
    Next
Next


--  作者:龙潭春早
--  发布时间:2019/1/22 12:08:00
--  
精彩!

对于所有的功能区、功能组、组件,遍历可执行!

不过,对于具体的一个功能区A,却不行,为什么呢?

代码:

For Each r As RibbonMenu.Tab In RibbonTabs("功能区A")
    output.show(r.text)
    For Each g As RibbonMenu.Group In r.Groups
        output.show(g.text)
        For Each c As object In g.Items
            output.show(c.name)
        Next
    Next
Next

出错:

图片点击可在新窗口打开查看此主题相关图片如下:状态按钮 - 遍历后 出错 3.png
图片点击可在新窗口打开查看


--  作者:有点甜
--  发布时间:2019/1/22 12:21:00
--  

参考

 

For Each g As RibbonMenu.Group In RibbonTabs("功能区A").Groups
    output.show(g.text)
    For Each c As object In g.Items
        output.show(c.name)
    Next
Next

 


--  作者:龙潭春早
--  发布时间:2019/1/22 13:32:00
--  
嗯 应该直接定义功能组!

多谢啦!

--  作者:龙潭春早
--  发布时间:2019/1/23 20:53:00
--  
怎么遍历快速访问栏 QAT 里的组件呢?

下面代码说 “Items” 不是 RibbonMenu.QAT 的成员

For Each itm As object In QAT.Itmes
      output.show(itm.name)
Next