ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E文精选 > 综合应用 > 细品RibbonX(49):在功能区中使用上下文控件

细品RibbonX(49):在功能区中使用上下文控件

作者:绿色风 分类: 时间:2022-08-17 浏览:164
楼主
apolloh
上下文选项卡对新UI的功能提供了极大的推进作用。当用户对某对象执行特定的任务时就会出现特定的选项卡。例如,在Excel中处理图表时,一个上下文选项卡提供用于图表处理的额外选项。本文将介绍创建和执行这些特定的选项卡,以及如何修改内置的上下文选项卡,也介绍如何定制或替换内置的弹出菜单,如何创建自已的上下文弹出菜单。最后,探讨创建一个使用多种语言的UI。
使项目上下文
使项目上下文意味着必须响应所做的内容,例如操控表或图片。根据对上下文控件的定义,需要在新Office UI中使用上下文选项卡集合来执行任务。然而,也不总是这样。
下面介绍上下文控件的概念,例如选项卡、组和通用控件。

当执行上下文敏感的命令时,立即想到的是上下文选项卡。作为使Ribbon的功能完整的一部分,这些特定的选项卡将根据所选择的对象或这些对象是否获得焦点而从功能区中出现和消失,例如图表、数据透视表或图片。
下图显示了名为“图片工具”的tabSet,包含一个名为“格式”的选项卡。

 
要实现这样的解决方案,需要使用上下文选项卡集合和tabSet元素。下面的XML标记作为上下文选项卡集和相应的选项卡的容器:


  1. <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  2.     <ribbon>
  3.         <contextualTabs>
  4.             <tabSet>
  5.                 <!-- Your contextual tab code goes here -->
  6.             </tabSet>
  7.         </contextualTabs>
  8.     </ribbon>
  9. </customUI>
contextualTabs集合是每个tabSet的父对象,同样选项卡的collection对象是选项卡的父对象。可以使用上述代码来创建自已的上下文敏感功能,访问内置的tabSets来修改它们。不巧的是,这样的tabSets扩展不能应用到Excel或Word,仅能对Access的窗体和报表提供这样的扩展。当在Access中使用自定义选项卡tabSets时,需要按下列方式引用扩展的tabSet:


  1. <tabSet idMso=”TabSetFormReportExtensibility”>
在这个tabSet里,创建上下文选项卡UI。
对于Excel和Word,需要通过完全控制内置的上下文选项卡或者通过联合getVisible属性使用事件来使选项卡的行为像上下文选项卡。

例如,当用户处理Excel工作簿中的工作表Sheet1时,希望仅使字体组和插入图表组可见。XML代码:


  1. <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
  2.     onLoad="rxIRibbonUI_onLoad">
  3.     <ribbon startFromScratch="false">
  4.         <tabs>
  5.             <tab idMso="TabHome">
  6.                 <group idMso="GroupFont"
  7.                    getVisible="rxShared_getVisible"/>
  8.             </tab>
  9.             <tab idMso="TabInsert">
  10.                 <group idMso="GroupInsertChart**cel"
  11.                    getVisible="rxShared_getVisible"/>
  12.             </tab>
  13.          </tabs>
  14.     </ribbon>
  15. </customUI>
使用在XML中定义的共享回调,现在能够通过使用想控制的特定工作表的自定义属性来决定属性的返回值。使用下面的代码:


  1. Sub rxShared_getVisible(control As IRibbonControl, ByRef returnedVal)
  2.     Select Case control.ID
  3.         Case "GroupFont"
  4.             returnedVal = Sheet1.rxGroupFontVisible
  5.         Case "GroupInsertChart**cel"
  6.             returnedVal = Sheet1.rxGroupInsertChart**cel
  7.     End Select
  8. End Sub
根据自定义的属性值设置该属性的值。首先,设置Ribbon对象,这样当文档打开时以便设置该Ribbon为ThisWorkbook对象的属性。下面的代码放置在ThisWorkbook模块中:


  1. Private pRibbonUI As IRibbonUI

  2. Public Property Let rxIRibbonUI(iRib As IRibbonUI)
  3.     Set pRibbonUI = iRib
  4. End Property

  5. Public Property Get rxIRibbonUI() As IRibbonUI
  6.     Set rxIRibbonUI = pRibbonUI
  7. End Property
其次,指定想控制的工作表的自定义属性,代码如下所示。自定义属性可读写,以便执行期间的任何时候都能重新赋值。


  1. Private pblnGroupFontVisible As Boolean
  2. Private pblnGroupChartVisible As Boolean

  3. Property Let rxGroupFontVisible(ByVal blnVisible As Boolean)
  4.     pblnGroupFontVisible = blnVisible
  5. End Property

  6. Property Get rxGroupFontVisible() As Boolean
  7.    rxGroupFontVisible = pblnGroupFontVisible
  8. End Property

  9. Property Let rxGroupInsertChart**cel(ByVal blnVisible As Boolean)
  10.     pblnGroupChartVisible = blnVisible
  11. End Property

  12. Property Get rxGroupInsertChart**cel() As Boolean
  13.    rxGroupInsertChart**cel = pblnGroupChartVisible
  14. End Property
最后,根据需要修改自定义属性。这里,我们希望当指定工作表是活动工作表时显示这些组,因此使用Worksheet_Activate和Worksheet_Deactivate事件来修改属性值,代码如下:


  1. Private Sub Worksheet_Activate()
  2.     Sheet1.rxGroupFontVisible = True
  3.     Sheet1.rxGroupInsertChart**cel = True
  4.     ThisWorkbook.rxIRibbonUI.Invalidate
  5. End Sub

  6. Private Sub Worksheet_Deactivate()
  7.     Sheet1.rxGroupFontVisible = False
  8.     Sheet1.rxGroupInsertChart**cel = False
  9.     ThisWorkbook.rxIRibbonUI.Invalidate
  10. End Sub
当激活/取消激活该工作表时,显示或隐藏相应的组。
使用不明显的方法
使用可见性创建上下文敏感的选项卡和组可能有点不正规,但是确实是达到目标的有效的方式。然而,这种方式不是在所有情形下都可用,特别是在处理内置组中的内置控件时。

可以使用enabled属性决定控件是否启用。
下面通过使用getEnabled属性提供上下文敏感的控件。要禁用命令,必须引用该命令本身和按钮或通用控件,例如禁用复制和剪切命令的XML代码如下:


  1. <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"
  2.     onLoad="rxIRibbonUI_onLoad">
  3.     <commands>
  4.         <command idMso="Copy" getEnabled="rxShared_getEnabled"/>
  5.         <command idMso="Cut" getEnabled="rxShared_getEnabled"/>
  6.     </commands>
  7. </customUI>
下一步,添加共享回调来处理要执行的程序:


  1. Sub rxShared_getEnabled(control As IRibbonControl, ByRef returnedVal)
  2.     Select Case control.ID
  3.         Case "Copy"
  4.             returnedVal = Sheet1.rxCopyEnabled
  5.         Case "Cut"
  6.             returnedVal = Sheet1.rxCutEnabled
  7.     End Select
  8. End Sub
同样,使用自定义属性指定回调的返回值。
修改内置的选项卡集
下图展示了对内置的图表工具上下文选项卡集中添加的自定义选项卡。

 
正确修改内置选项卡集的关键是知道想要定制的tabSet的idMso,本例中,我们想修改TabSetChartTools选项卡集。
因此,在内置选项卡集中添加自定义选项卡的XML代码如下:
[code]

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">08.png
 
03.png
 
04.png
 
05.png
 
06.png
 
07.png
 
2楼
轩辕轼轲
帖子好像不完整啊
3楼
蘑菇花
不错的。谢谢喽
4楼
chenlifeng
不错的话,大家给点小分,精神强烈支持!
5楼
水星钓鱼
感谢分享,学习

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap