分享

细品RibbonX(28):splitButton控件详解

 yuxinrong 2009-10-29

咋看起来,splitButton实质上与menu元素相同。与使用菜单一样,当用户单击拆分按钮时,将执行一项命令或者显示额外选项的层级列表。

与菜单在不同的项目之间有线条分隔不一样,splitButton没有这样的格式属性。因此,splitButton通常将相似的命令组合在一起,而将不同的命令组织到逻辑组和子组中。

splitButton胜过menu之处是能够将toggleButton控件作为界面中显示的控件的能力(“脸”控件)。当然,也可以使用按钮控件作为splitButton控件的“脸”控件。

1splitButton元素必需的属性

拆分按钮控件需要下表1所列的id属性之一。

1splitButton元素必需的属性

属性

何时使用

id

当创建自已的拆分按钮时

idMso

当使用现有的Microsoft拆分按钮时

idQ

当在命名空间之间创建共享的拆分按钮时

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

拆分按钮控件可以使用下表2列出的任一insert属性。

2splitButton元素可选的insert属性

INSERT属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso

在组末尾插入

Microsoft控件之后插入

insertBeforeMso

有效的Mso

在组末尾插入

Microsoft控件之前插入

insertAfterQ

有效的组idQ

在组末尾插入

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

insertBeforeQ

有效的组idQ

在组末尾插入

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

也可以为菜单控件设置下表3所列的任何静态属性或等价的动态属性。

3splitButton元素可选的属性和回调

静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

enabled

getEnabled

true,false,1,0

true

Sub GetEnabled(control As IRibbonControl,

ByRef returnedVal)

keytip

getKeytip

13个字符

none

Sub GetKeytip(control As

IRibbonControl,

ByRef returnedVal)

showLabel

getShowLabel

true,false,1,0

true

Sub GetShowLabel(control

As IRibbonControl,

ByRef returnedVal)

tag

(none)

11024个字符

(none)

(none)

visible

getVisible

true,false,1,0

true

Sub GetVisible(control As

IRibbonControl,

ByRef returnedVal)

3splitButton元素允许的子对象

splitButton元素必须包含一个按钮或一个切换按钮(作为该控件的外观),也可以是一个menu元素,但必须在按钮或切换按钮之后定义。

4splitButton元素的父对象

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

n         box

n         buttonGroup

n         dynamicMenu

n         group

n         menu

n         officeMenu

5、使用内置的splitButton控件

1)创建一个新的.xlsx文件,并将其保存为Excel Built In splitButton Example.xlsx

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

3)输入下列XML代码:

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

    <ribbon

       startFromScratch=false>

       <tabs>

       <tab id=rxtabDemo

           label=Demo

           insertBeforeMso=TabHome>

           <group id=rxgrpDemo

              label=Demo>

              <splitButton idMso=FileSaveAsMenu

                  size=large/>

           </group>

       </tab>

       </tabs>

    </ribbon>

</customUI>

下图为上述代码创建的组。

splitbuttonsample1

 

6、创建自定义splitButton控件

本例中,添加能够让我们在工作簿中插入新工作表的拆分按钮控件,而不是在工作表标签中右击,选择插入,然后选择工作表类型。即在插入选项卡中使用拆分按钮使用户插入一个新工作表。此外,因为插入工作表可能是一项频繁的任务,所以将新控件放置在功能区的开始。

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

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

<customUI

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

    <ribbon

       startFromScratch=false>

       <tabs>

       <!– Enter your first tab here –>

           <tab idMso=TabInsert>

              <group id=rxgrpInsertSheet

                  label=Sheets

                  insertBeforeMso=GroupInsertTablesExcel>

                  <splitButton id=rxsbtnInsertSheet

                         size=large>

                     <button id=rxbtnSplitFace

                         label=Sheets

                         imageMso=CreateReportFromWizard/>

                     <menu id=mnuInsertSheet>

                     <button id=rxbtnWorksheet

                         label=Insert Worksheet

                         imageMso=GetExternalDataFromText

                         onAction=rxbtnInsertSheet_click/>

                     <button id=rxbtnChartsheet

                         label=Insert Chart Sheet

                         imageMso=PivotChartType

                         onAction=rxbtnInsertSheet_click/>

                     </menu>

                  </splitButton>

              </group>

           </tab>

       </tabs>

    </ribbon>

</customUI>

注意,splitButton包含一个没有onAction回调的按钮,该按钮的唯一目的是作为拆分按钮的外观图像(“脸”)。

此外,该按钮带有一个菜单,包含两个按钮:Insert WorksheetInsert Chart Sheet,为方便起见,共享一个回调签名。

3)生成回调签名,并复制代码后关闭CustomUI Editor

4)在Excel中打开该工作簿,打开VBE并将回调签名代码粘贴到一个标准模块中。下面编辑该回调以响应希望的操作。

‘rxbtnWorkSheet onAction回调

Sub rxbtnInsertSheet_click(control As IRibbonControl)

    Select Case control.ID

        Case Is = “rxbtnWorksheet”

            ActiveWorkbook.Worksheets.Add

        Case Is = “rxbtnChartsheet”

            ActiveWorkbook.Charts.Add

    End Select

End Sub

如代码所示,设置回调来立即查询已经触发的控件的ID。如果是rxbtnWorksheet控件,那么将插入新工作表;如果是rxbtnChartsheet控件,那么将插入新图表工作表。

现在,该工作簿的“插入”选项卡如下图。

splitbuttonsample2

 

下面,我们再看一个示例。该示例沿用细品RibbonX(27)中的菜单示例,看看menusplitButton控件有什么不同。其XML代码如下:

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

    <ribbon startFromScratch=false>

        <tabs>

            <tab id=rxtabDemo

                 label=Demo

                 insertBeforeMso=TabHome>

                 <group id=rxgrpViews

                        label=Document Views>

                     <menu id=rxmnuViewsMenu

                           itemSize=normal

                           imageMso=FilePrintPreview

                           label=Views Menu

                           size=large>

                           <toggleButton idMso=ViewPageBreakPreviewView/>

                           <toggleButton idMso=ViewFullScreenView/>

                           <checkBox idMso=ViewHeadings/>

                           <checkBox idMso=ViewFormulaBar/>

                           <checkBox idMso=GridlinesExcel/>

                    </menu>

                    <splitButton id=rxsbtnSplitVersion

                                 size=large

                                 showLabel=false>

                           <button id=rxbtnSplitVersionFace

                                   imageMso=FilePrintPreview

                                   label=Split Button Version/>

                           <menu id=rxmnuSplitVersionMenu

                                 itemSize=normal>

                             <toggleButton idMso=ViewPageBreakPreviewView/>

                             <toggleButton idMso=ViewFullScreenView/>

                             <checkBox idMso=ViewHeadings/>

                             <checkBox idMso=ViewFormulaBar/>

                             <checkBox idMso=GridlinesExcel/>

                           </menu>

                     </splitButton>

                 </group>                       

            </tab>

        </tabs>

    </ribbon>

</customUI>

上述XML代码使用splitButton元素创建了一个基本的菜单。然而,menu元素中的一些良好特征例如menuSeparator不可用于splitButton元素。

Excel中的自定义界面如下图:

splitbuttonsample3

能注意到它们之间的不同吗?在splitButton控件中有一条细的水平线将图像和文本分隔开,这条线在menu控件中不明显。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章