您的位置:首页 > 其它

细品RibbonX(21):toggleButton控件详解

2009-09-30 14:17 127 查看
切换按钮用于在两种状态之间选择,例如当按下某切换按钮时开启或关闭某功能。
1toggleButton元素必需的属性
切换按钮需要下表1所列的id属性之一。
表1:toggleButton元素必需的属性
属性
何时使用
id
当创建自已的切换按钮时
idMso
当使用现有的Microsoft切换按钮时
idQ
当在命名空间之间创建共享的切换按钮时
切换按钮也需要表2所列出的onAction回调。
表2:toggleButton元素必需的回调
动态属性
允许值
VBA回调签名
onAction
1至4096个字符
Sub OnAction(control As IRibbonControl,
selectedId As String,
selectedIndex As Integer)
2、带有回调签名的可选的静态属性和动态属性
使用切换按钮时,可以使用下表3列出的任一insert属性。
表3:toggleButton元素可选的insert属性
INSERT属性
允许值
默认值
何时使用
insertAfterMso
有效的Mso组
在组末尾插入
在Microsoft控件之后插入
insertBeforeMso
有效的Mso组
在组末尾插入
在Microsoft控件之前插入
insertAfterQ
有效的组idQ
在组末尾插入
在共享的命名空间控件之后插入
insertBeforeQ
有效的组idQ
在组末尾插入
在共享的命名空间控件之前插入
也可以提供下表4所列的任何或所有的属性。
表4:toggleButton元素可选的属性和回调
静态属性
动态属性
允许值
默认值
动态属性的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至4096个字符
(none)
Sub GetImage(control As
IRibbonControl,
ByRef returnedVal)
imageMso
getImage
1至4096个字符
(none)
同上
keytip
getKeytip
1至3个字符
(none)
Sub GetKeytip(control As
IRibbonControl,
ByRef returnedVal)
label
getLabel
1至4096个字符
(none)
Sub GetLabel(control As
IRibbonControl,
ByRef returnedVal)
(none)
getPressed
true,false,1,0
(none)
Sub GetPressed(control As
IRibbonControl,
ByRef returnedVal)
screentip
getScreentip
1至4096个字符
(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至4096个字符
(none)
Sub GetSupertip(control As
IRibbonControl,
ByRef returnedVal)
tag
(none)
1至4096个字符
(none)
(none)
visible
getVisible
true,false,1,0
true
Sub GetVisible(control As
IRibbonControl,
ByRef returnedVal)
3toggleButton元素允许的子对象
toggleButton控件不支持任何子对象。
4toggleButton元素的父对象
在下列任何控件内都能放置toggleButton控件:
n box
n buttonGroup
n dynamicMenu
n group
n menu
n officeMenu
n splitButton
5、使用内置的切换按钮控件
在功能区中使用了很多内置的切换按钮控件。下面的示例在自定义选项卡中添加四个内置的切换按钮。
(1)创建一个新的.xlsx文件,并将其保存为Excel Built In toggleButton Example.xlsx。
(2)关闭该文件并在CustomUI Editor中打开。
(3)输入下列XML代码:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab id=“rxtabCustom“
label=“My Tools“
insertBeforeMso=“TabHome“>
<group id=“rxgrpFormats“
label=“Formatting“>
<toggleButton idMso=“Bold“/>
<toggleButton idMso=“Italic“/>
<toggleButton idMso=“Underline“/>
<toggleButton idMso=“UnderlineDouble“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
(4)保存并关闭CustomUI Editor。在Excel中打开工作簿,如下图所示。




6、创建自定义切换按钮控件
下面的示例再次使用在细品RibbonX(18)中使用的预付费用计划示例,我们将添加自定义视图切换功能,这样允许用户显示或隐藏“Expense To”列,如下图所示。



在Excel中,单击“视图—自定义视图”,选择“添加”并命名为“cvw_Show”。该视图用于返回工作表的全视图,显示所有列。关闭“视图管理器”对话框。
接着,设置隐藏“Expense To”列的第二个视图。隐藏F列,重新打开“视图管理器”对话框,添加一个名为“cvw_Hide”的新的自定义视图。关闭“视图管理器”对话框。
现在,录制切换视图的宏。单击“录制宏”按钮,开始录制:
(1)单击“视图”选项卡。
(2)单击“自定义视图”。
(3)选择cvw_Hide视图并选择“显示”。
(4)再次单击“自定义视图”。
(5)选择cvw_Show视图并选择“显示”。
(6)停止录制。
转到VBE中,查看录制的代码:
ActiveWorkbook.CustomViews(”cvw_Hide”).Show
ActiveWorkbook.CustomViews(”cvw_Show”).Show
接下来,让我们设置功能区中所自定义的切换按钮。保存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“/>
<toggleButton id=“rxtglHideExpense“
label=“Hide Expenses“
imageMso=“FieldList“
size=“large“
onAction=“rxtglHideExpense_Click“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
生成回调签名并复制,保存并关闭文件。
在Excel中重新打开该文件,转到VBE中,粘贴回调签名代码。
下面,修改回调以满足需要,代码如下:
‘rxtglHideExpense onAction回调
Sub rxtglHideExpense_Click(control As IRibbonControl, pressed As Boolean)
Select Case pressed
Case True
ActiveWorkbook.CustomViews(”cvw_Hide”).Show
Case False
ActiveWorkbook.CustomViews(”cvw_Show”).Show
End Select
End Sub
好了!现在可以转到Excel界面中查看切换按钮的功能了。
然而,如果您隐藏了F列,保存并关闭工作簿,再打开该工作簿时,切换按钮并不会高亮选中,并且需要单击两次才能实现切换功能。此时,可以使用下列方式解决:
n 在Workbook_Open过程中将cvw_Show视图设置为活动的。
n 设置getPressed回调代码测试当工作簿打开时哪个视图为活动视图,然后将其状态返回到切换按钮。
下面再举一个示例。
本示例使用一个切换按钮来切换分页显示。如下面的XML代码所示,在“视图”选项卡中自定义一个组并放置自定义的切换按钮:



<customUI onLoad=“rxIRibbonUI_onLoad“ xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab idMso=“TabView“>
<group id=“rxgrpStyleInsp“
label=“Custom Options“
insertBeforeMso=“GroupZoom“>
<toggleButton id=“rxtglPageBreaks“
label=“Display PageBreaks“
getPressed=“rxtglPageBreaks_getPressed“
getImage=“rxtglPageBreaks_getImage“
onAction=“rxtglPageBreaks_click“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
生成回调签名,并将其复制。关闭CustomUI Editor。
在Excel中打开该工作簿,转到VBE,粘贴回调签名到标准模块中,并输写代码:
Private ribbonUI As IRibbonUI

‘customUI.onLoad回调
Sub rxIRibbonUI_onLoad(ribbon As IRibbonUI)
Set ribbonUI = ribbon
End Sub

‘rxtglPageBreaks getPressed回调
Sub rxtglPageBreaks_getPressed(control As IRibbonControl, ByRef returnedVal)
returnedVal = ActiveSheet.DisplayPageBreaks
End Sub

‘rxtglPageBreaks getImage回调
Sub rxtglPageBreaks_getImage(control As IRibbonControl, ByRef returnedVal)
Select Case ActiveSheet.DisplayPageBreaks
Case True
returnedVal = “SignatureInsertMenu”
Case False
returnedVal = “DesignMode”
End Select
End Sub

‘rxtglPageBreaks onAction回调
Sub rxtglPageBreaks_click(control As IRibbonControl, pressed As Boolean)
ActiveSheet.DisplayPageBreaks = pressed
ribbonUI.InvalidateControl “rxtglPicHold”
End Sub
保存该工作簿并关闭。重新打开该工作簿,此时可以测试该切换按钮的功能了。

相关文章

细品RibbonX(20):editBox控件详解

细品RibbonX(19):checkBox控件详解

细品RibbonX(18):button控件详解

细品RibbonX(16):RibbonX开发基础问答

细品RibbonX(15):回调(CallBacks)

细品RibbonX(14):核心的OpenXML架构元素

细品RibbonX(13):初识XML

细品RibbonX(9):层次分明的RibbonX代码结构

细品RibbonX(8):自定义Ribbon的“武器库”

细品RibbonX(7):有效的RibbonX设计

标签:界面设计, Ribbon, 功能区
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: