细品RibbonX(18):button控件详解
资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659
在功能区的按钮中,可以使用内置图像或提供自已的图像,可以指定大按钮或者更小的形式,添加少量的代码甚至可以同时提供标签。此外,可以利用大量的回调过程从而使按钮为动态的。按钮提供了几种用于定制外观和响应的属性。某些属性是必需的,另外一些是可选的。
在创建按钮时,下面所列出的表可以提供良好的参考。
1、button元素必需的属性
按钮需要下表1所列的id属性之一。
表1:button元素必需的属性
属性 | 何时使用 |
id | 当创建自已的按钮时 |
idMso | 当使用现有的Microsoft按钮时 |
idQ | 当在命名空间之间创建共享的按钮时 |
每个按钮也需要表2所列出的onAction回调。
表2:button元素必需的回调
动态属性 | 允许值 | VBA回调签名 |
onAction | 1至4096个字符 | Sub OnAction(control As IRibbonControl) |
onAction | 重新使用(或重利用) | Sub OnAction(control As IRibbonControl, byRef CancelDefaultcancelDefault) |
2、带有回调签名的可选的静态属性和动态属性
使用按钮时,可以使用下表3列出的任一insert属性。
表3:button元素可选的insert属性
INSERT属性 | 允许值 | 默认值 | 何时使用 |
insertAfterMso | 有效的Mso组 | 在组末尾插入 | 在Microsoft控件之后插入 |
insertBeforeMso | 有效的Mso组 | 在组末尾插入 | 在Microsoft控件之前插入 |
insertAfterQ | 有效的组idQ | 在组末尾插入 | 在共享的命名空间控件之后插入 |
insertBeforeQ | 有效的组idQ | 在组末尾插入 | 在共享的命名空间控件之前插入 |
也可以提供下表4所列的任何或所有的属性。
表4:button元素可选的属性和回调
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 |
description | getDescription | 1至4096个字符 | (none) | Sub GetDescription(control As IRibbonControl,ByRef returnedVal) |
enabled | getEnabled | true,false,1,0 | true | Sub GetEnabled(control As IRibbonControl,ByRef returnedVal) |
image | getImage | 1至1024个字符 | (none) | Sub GetImage(control As IRibbonControl,ByRef returnedVal) |
imageMso | getImage | 1至1024个字符 | (none) | 同上 |
keytip | getKeytip | 1至3个字符 | (none) | Sub GetKeytip(control As IRibbonControl,ByRef returnedVal) |
label | getLabel | 1至1024个字符 | (none) | Sub GetLabel(control As IRibbonControl,ByRef returnedVal) |
screentip | getScreentip | 1至1024个字符 | (none) | Sub GetScreentip(control As IRibbonControl,ByRef returnedVal) |
showImage | getShowImage | true,false,1,0 | true | Sub GetShowImage(control As IRibbonControl,ByRef returnedVal) |
showLabel | getShowLabel | true,false,1,0 | true | Sub GetShowLabel(control As IRibbonControl,ByRef returnedVal) |
size | getSize | normal,large | normal | Sub GetSize(control As IRibbonControl,ByRef returnedVal) |
supertip | getSupertip | 1至1024个字符 | (none) | Sub GetSupertip(control As IRibbonControl,ByRef returnedVal) |
tag | (none) | 1至1024个字符 | (none) | (none) |
visible | getVisible | true,false,1,0 | true | Sub GetVisible(control As IRibbonControl,ByRef returnedVal) |
3、button元素允许的子对象
button控件不支持任何子对象。
4、button元素的父对象
在下列任何控件内都能放置button控件:
n box
n buttonGroup
n dialogBoxLauncher
n documentControls
n dynamicMenu
n gallery
n group
n menu
n splitButton
n officeMenu
5、使用内置的按钮控件
(1)创建一个新的.xlsx文件,并将其保存为Excel Built In Button Example.xlsx。
(2)关闭该文件并在CustomUI Editor中打开。
(3)应用RibbonBase模板。
(4)在<tabs>和</tabs>之间插入下列XML:
<tab id=“rxtabCustom1“
label=“Demo“
insertBeforeMso=“TabHome“>
<group id=“DemoGroup“
label=“Demo Group“>
<button idMso=“AccountingFormat“/>
</group>
</tab>
下图为上述代码创建的组。
注意,当使用内置控件时,获得完整的包装:图像、标签、预设的回调,等等。因此,如果仅希望有图像和功能,则除了期望的idMso,需要设置showLabel属性为false。此时,简单地修改代码如下:
<tab id=“rxtabCustom1“
label=“Demo“
insertBeforeMso=“TabHome“>
<group id=“DemoGroup“
label=“Demo Group“>
<button idMso=“AccountingFormat“
showLabel=“false“/>
</group>
</tab>
现在将创建仅显示图像的一个漂亮按钮,没有标签,如下图所示,当然它仍具有该内置控件的所有其他属性。
6、按钮的特性:showLabel属性
假设您希望上文中的按钮尺寸更大一些,则可以修改相应的代码如下:
<button idMso=“AccountingFormat“
showLabel=“false“
size=“large“/>
结果如下图所示:
代码中没有让标签显示,结果却出现了标签?这是按钮模型的一个奇怪的特性。在size=”normal”情况下正常工作的按钮,在size=”large”时却不按要求工作。如上所见,当按钮是大尺寸时,默认值覆盖了自定义的设置。
如何达到要求呢?要想在大尺寸时不显示标签,需要将标签文本指定为空格(必须要有一个空格)。如下所示:
<group id=“DemoGroup“
label=“Demo Group“>
<button idMso=“AccountingFormat“
label=““
size=“large“/>
</group>
结果如下图:
7、创建自定义按钮控件
即添加自已的按钮,单击该按钮时,会触发自已编写的宏代码实现自定义的功能。
本例中,假设你是一名会计师,并且已经为支付的费用创建了一份连续的清单,如下图所示,
现在需要编写宏代码以每月为基础来准备下月的工作表,特别是要完成下述操作:
(1)复制Ending Balance到Openning Balance列。
(2)清除Additions和Usage区(本月的条目)。
(3)预先填写到下月结束的日期。
(4)指导用户保存文件。
因此,在标准模块中编写下列代码:
Public Sub RollForward()
With ActiveSheet
.Range(“E6:E10″).Copy
.Range(“B6:B10″).PasteSpecialPaste:=xlValues
.Range(“C6:D10″).ClearContents
.Range(“A3″) = .Range(“A3″).Value + 40– DatePart(“d”, .Range(“A3″).Value + 40)
End With
MsgBox “Rolled forward successfully!” &vbCrLf & _
“Please save the file under a newname.”, _
vbOKOnly + vbInformation, “Success!”
End Sub
可以按Alt+F8键,在“宏”对话框中选择RollForward来测试。
下面,我们将该宏附加到按钮中。首先,保存Excel文件并关闭。然后,在CustomUI Editor中打开该文件,输入下面的XML代码:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab id=“DemoTab“
label=“Demo“
insertBeforeMso=“TabHome“>
<group id=“DemoGroup“
label=“Demo Group“>
<button id=“rxbtnRollForward“
label=“Roll Forward“
imageMso=“CreateReportFromWizard“
size=“large“
onAction=“rxbtnRollForward_Click“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
单击“Generate Callbacks”生成回调,并复制生成的代码。保存并关闭CustomUI Editor,然后重新打开Excel。在VBE中粘贴从CustomUI Editor中复制的代码,然后添加代码来调用上面已经测试过的VBA过程。代码如下所示:
‘Callback forrxbtnRollForward onAction
SubrxbtnRollForward_Click(control As IRibbonControl)
Select Case control.ID
Case Is = “rxbtnRollForward”
Call RollForward
Case Else
‘do nothing
End Select
End Sub
保存后,回到Excel界面,再测试按钮。