细品RibbonX(30):box元素详解

细品RibbonX(30):box元素详解

资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659

 Loading ...

 

box元素用来在组里指定的控件周围放置一个可视的框,其主要目的是将控件作为一个单元组合在一起。

通常情况下,分配到组中的每个控件都被放置在先前的控件下面直到该列被填满,然后下一个控件被放置在其右侧列的顶行。然而,通过在框里面组合命令,可以将几个控件视作一个整体,并且一次将整个组放置在功能区。这有助于我们方便地组织显示的顺序,不会使界面混乱,或者留下一些空白。

1、box元素必需的属性

box元素需要下表1所列的id属性之一。

表1:box元素必需的属性

属性

何时使用

id

当创建自已的框时

idQ

当在命名空间之间创建共享的框时

2、带有回调签名的可选的静态属性和动态属性

虽然指定位置是可选的,但是如果选择相对于另一个元素决定框的位置,那么必须使用下表2列出的任一insert属性。

表2:box元素可选的insert属性

INSERT属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso组

在组末尾插入

在Microsoft控件之后插入

insertBeforeMso

有效的Mso组

在组末尾插入

在Microsoft控件之前插入

insertAfterQ

有效的组idQ

在组末尾插入

在共享的命名空间控件之后插入

insertBeforeQ

有效的组idQ

在组末尾插入

在共享的命名空间控件之前插入

也可以为box元素设置下表3所列的可选的属性和回调。

表3:box元素可选的属性和回调

静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

boxStyle

(none)

horizontal,vertical

horizontal

(none)

visible

getVisible

true,false,1,0

true

Sub GetVisible(control

 As IRibbonControl,

ByRef returnedVal)

3、box元素允许的子对象

box控件能够包含各种各样的RibbonX控件:

n         box

n         button

n         buttonGroup

n         checkbox

n         comboBox

n         control

n         dropDown

n         dynamicMenu

n         editBox

n         gallery

n         labelControl

n         menu

n         splitButton

n         toggleButton

注意,box控件也可以包含其它box控件,称之为嵌套。

4、box元素的父对象

在下列任何控件内都能放置box控件:

n         box

n         group

5、创建自定义的box元素

示例1

本示例演示使用水平的box控件的效果。

(1)创建一个新的.xlsx文件,并将其保存为Excel box Example.xlsx。

(2)关闭该文件并在CustomUI Editor中打开。

(3)输入下列XML代码:

<customUI xmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon>

       <tabs>

           <tab id = rxtab_Demo

              label=Demo

              insertBeforeMso=TabHome>

              <group id=rxgrp_Demo

                  label=Demo Group>

                  <box id=rxboxFormat1

                     boxStyle=horizontal

                     visible=true>

                     <toggleButton idMso=Bold/>

                     <toggleButton idMso=Italic/>

                     <toggleButton idMso=Underline/>

                     <toggleButton idMso=UnderlineDouble/>

                  </box>

                  <button id=rxbtnHappy1

                     imageMso=HappyFace

                     label=Button 1/>

                  <button id=rxbtnHappy2

                     imageMso=HappyFace

                     label=Button 2/>

                  <button id=rxbtnHappy3

                     imageMso=HappyFace

                     label=Button 3/>

                  <button id=rxbtnHappy4

                     imageMso=HappyFace

                     label=Button 4/>

              </group>

           </tab>

       </tabs>

    </ribbon>

</customUI>

(4)保存后关闭CustomUI Editor。

(5)在Excel中重新打开该文件,下图即为上述XML代码创建的组。

 

创建了一个水平框将四个格式元素组合在一起,允许其作为一个单元格移动。除了允许按钮跨越一列外,水平组也在Button1和Button2的右侧创建了“空白”,而Button3和Button4则没有。

示例2

(6)关闭Excel box Example.xlsx。

(7)重新在CustomUI Editor中打开该文件。

(8)修改XML代码如下:

    boxStyle=horizontal

修改为:

    boxStyle=vertical

(9)保存后关闭CustomUI Editor。

(10)在Excel中重新打开该文件,下图即为上述XML代码创建的组。

 

 

示例3

本示例除了演示嵌套的框控件外,还将展示使用getVisible回调控制框的可视性的效果。

示例中包含两个box控件,每一个包含两个前面示例中使用的格式控件。此外,每个框都宿于其父框里,允许用户在功能区中预留垂直空间以便没有其它按钮在这些控件下面。同时,使用三个复选框来选择哪个框可见。

(1)新建一个工作簿,以.xlsm为扩展名保存后关闭。

(2)在CustomUI Editor中打开该工作簿,并输入下列XML代码:

<customUI onLoad=rxIRibbonUI_onLoadxmlns=http://schemas.microsoft.com/office/2006/01/customui>

    <ribbon startFromScratch=false>

        <tabs>

            <tab id=rxtabDemo

                 insertBeforeMso=TabHome

                 label=Demo>

                 <group id=rxgrpDemo

                        label=Demo Group>

                        <box id=rxbox1

                             boxStyle=vertical

                             getVisible=rxboxshared_getVisible>

                            <box id=rxbox11

                                  boxStyle=horizontal

                                 getVisible=rxboxshared_getVisible>

                                 <toggleButton idMso=Bold/>

                                 <toggleButton idMso=Italic/>

                            </box>

                            <box id=rxbox12

                                 boxStyle=horizontal

                                 getVisible=rxboxshared_getVisible>

                                 <toggleButton idMso=Underline/>

                                 <toggleButton idMso=UnderlineDouble/>

                            </box>

                        </box>

                            <checkBox id=rxchkVisibleBox1

                                       label=Box 1 Visible?

                                       getPressed=rxchkShared_pressed

                                       onAction=rxchkShared_click/>

                            <checkBox id=rxchkVisibleBox11

                                       label=Box 1-1 Visible?

                                       getPressed=rxchkShared_pressed

                                       onAction=rxchkShared_click/>                                       

                            <checkBox id=rxchkVisibleBox12

                                       label=Box 1-2 Visible?

                                       getPressed=rxchkShared_pressed

                                       onAction=rxchkShared_click/>

                            <button id=rxbtnReset

                                    imageMso=HappyFace

                                    label=Reset All

                                    onAction=rxbtnReset_click/>

                </group>

            </tab>

        </tabs>

    </ribbon>

</customUI>

注意,本示例实际上共有三个box控件,其它两个嵌套在第一个中。三个控件共享回调。当然,需要能够使功能区无效以迫使box控件隐藏或显示,因此需要捕获RibbonUI对象。

(3)生成回调签名并复制后,关闭CustomUIEditor。

(4)重新打开该工作簿,打开VBE,将回调签名代码粘贴到标准模块,然后开始完善代码。

首先,在模块顶部声明公共变量:

Dim rxIRibbonUI AsIRibbonUI

Dim bBox1_Visible AsBoolean

Dim bBox11_Visible AsBoolean

Dim bBox12_Visible AsBoolean

第1行代码中的变量用于存储RibbonUI对象,能够在后面使功能区无效。其它三个变量包含不同组的可视状态。由于通过复选框控件控制,因此使用这些变量存储与每个框相关的复选框的状态。

除了在装载时捕获RibbonUI外,需要确保每个框控件是可见的。因此,onLoad回调代码如下:

‘customUI.onLoad回调

SubrxIRibbonUI_onLoad(ribbon As IRibbonUI)

    Set rxIRibbonUI = ribbon

    bBox1_Visible = True

    bBox11_Visible = True

    bBox12_Visible = True

End Sub

接下来,设置box控件的共享的getVisible回调:

‘rxbox1,rxbox11,rxbox12getVisible共享回调

Subrxboxshared_getVisible(control As IRibbonControl, ByRef returnedVal)

    Select Case control.ID

        Case “rxbox1″

            returnedVal = bBox1_Visible

        Case “rxbox11″

            returnedVal = bBox11_Visible

        Case “rxbox12″

            returnedVal = bBox12_Visible

    End Select

End Sub

case语句评估触发回调的控件,从变量中获取合适的值并返回给RibbonUI。getPressed回调基于该变量处理复选框控件。

‘rxchkVisibleBox1,-Box11,-Box12getPressed共享的回调

SubrxchkShared_pressed(control As IRibbonControl, ByRef returnedVal)

    Select Case control.ID

        Case “rxchkVisibleBox1″

            returnedVal = bBox1_Visible

        Case “rxchkVisibleBox11″

            returnedVal = bBox11_Visible

        Case “rxchkVisibleBox12″

            returnedVal = bBox12_Visible

    End Select

End Sub

接下来,创建当单击复选框时触发的程序。修改可见的变量的值为当前“按下”状态(true或false),然后触发功能区的无效。这种无效不仅仅触发每一个box控件的getVisible回调,也确保所有的复选框控件更新:

‘rxchkVisibleBox1,-Box11,-Box12onAction共享的回调

SubrxchkShared_click(control As IRibbonControl, pressed As Boolean)

    Select Case control.ID

        Case “rxchkVisibleBox1″

            bBox1_Visible = pressed

        Case “rxchkVisibleBox11″

            bBox11_Visible = pressed

        Case “rxchkVisibleBox12″

            bBox12_Visible = pressed

    End Select

    rxIRibbonUI.Invalidate

End Sub

最后是添加的按钮的onAction回调,便于设置每个控件为默认的可见状态:

‘rxbtnReset onAction共享回调使按钮可见

SubrxbtnReset_click(control As IRibbonControl)

    bBox1_Visible = True

    bBox11_Visible = True

    bBox12_Visible = True

    rxIRibbonUI.Invalidate

End Sub

好了!该测试用户界面效果了。保存代码并关闭工作簿,再重新打开该工作簿,如下图所示。

  

试着清除复选框,相应的控件将消失。单击“Reset All”将使所有控件恢复可见。

注意,试图使用getVisible回调设置父框为visible=”false”,将不会像您想像的那样隐藏父框和所有的子控件。相反,父和子box控件将保持当前状态,控件本身是可见的并且工作,而任何试图通过回调对嵌套控件状态的修改都将忽略。这种影响将保留到父框控件的getVisible回调重新被设置为True。

隐藏父box控件的唯一办法是隐藏所有的子项。此时,父框控件将折叠并且不可见,即使其visible属性被设置为True。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值