细品RibbonX(23):comboBox控件详解
资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659
Loading ...
组合框控件基于指定的记录源显示数据,它是编辑框和下拉控件的组合。该控件最明显的特征之一是:不仅能够从列表中选取项目,而且能够在其中输入项目。
comboBox控件常用于下列情形:
n 列表非常长,希望用户在输入一些关键词后能够迅速跳到合适的地方。(例如fonts控件)
n 希望呈现给用户一个预定义列表,同时也希望能够在列表中添加项目。
可以使用静态列表或动态创建列表来填充组合框。
1、comboBox元素必需的属性
组合框控件需要下表1所列的id属性之一。
表1:comboBox元素必需的属性
属性 | 何时使用 |
id | 当创建自已的组合框时 |
idMso | 当使用现有的Microsoft组合框时 |
idQ | 当在命名空间之间创建共享的组合框时 |
2、带有回调签名的可选的静态属性和动态属性
组合框控件可以使用下表2列出的任一insert属性。
表2:comboBox元素可选的insert属性
INSERT属性 | 允许值 | 默认值 | 何时使用 |
insertAfterMso | 有效的Mso组 | 在组末尾插入 | 在Microsoft控件之后插入 |
insertBeforeMso | 有效的Mso组 | 在组末尾插入 | 在Microsoft控件之前插入 |
insertAfterQ | 有效的组idQ | 在组末尾插入 | 在共享的命名空间控件之后插入 |
insertBeforeQ | 有效的组idQ | 在组末尾插入 | 在共享的命名空间控件之前插入 |
也可以为组合框设置下表3所列的任何或所有的属性或回调。
表3:comboBox元素可选的属性和回调
静态属性 | 动态属性 | 允许值 | 默认值 | 动态属性的VBA回调签名 |
(none) | onChange | 1至4096个字符 | (none) | Sub OnChange(control As IRibbonControl, text As String) |
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) | 同上 |
(none) | getItemCount | 1至1024个字符 | (none) | Sub GetItemCount(control As IRibbonControl, ByRef returnedVal) |
(none) | getItemID | 1至1024个字符 | (none) | Sub GetItemID(control As IRibbonControl, index As Integer, ByRef id) |
(none) | getItemImage | 独立的文本字符串 | (none) | Sub GetItemImage(control As IRibbonControl, index As Integer, ByRef returnedVal) |
(none) | getItemLabel | 1至1024个字符 | (none) | Sub GetItemLabel(control As IRibbonControl, index As Integer, ByRef returnedVal) |
(none) | getItemScreentip | 1至1024个字符 | (none) | Sub GetItemScreenTip(control As IRibbonControl, index As Integer, ByRef returnedVal) |
(none) | getItemSupertip | 1至1024个字符 | (none) | Sub GetItemSuperTip(control As IRibbonControl, index As Integer, ByRef returnedVal) |
keytip | getKeytip | 1至3个字符 | (none) | Sub GetKeytip(control As IRibbonControl, ByRef returnedVal) |
label | getLabel | 1至1024个字符 | (none) | Sub GetLabel(control As IRibbonControl, ByRef returnedVal) |
maxLength | (none) | 1至1024个字符 | 1024 | (none) |
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) |
showItemAttribute | (none) | true,false,1,0 | true | (none) |
showItemImage | (none) | true,false,1,0 | true | (none) |
showLabel | getShowLabel | true,false | true | Sub GetShowLabel(control As IRibbonControl, ByRef returnedVal) |
sizeString | (none) | 1至1024个字符 | 12 | (none) |
supertip | getSupertip | 1至1024个字符 | (none) | Sub GetSupertip(control As IRibbonControl, ByRef returnedVal) |
tag | (none) | 1至1024个字符 | (none) | (none) |
(none) | getText | 1至4096个字符 | (none) | Sub GetText(control As IRibbonControl, ByRef returnedVal) |
visible | getVisible | true,false,1,0 | true | Sub GetVisible(control As IRibbonControl, ByRef returnedVal) |
3、comboBox元素允许的子对象
comboBox元素可以使用的唯一的子对象是item元素。
4、comboBox元素的父对象
在下列任何控件内都能放置comboBox控件:
n box
n group
5、使用内置的组合框控件
在Excel的所有控件中,最著名的可能是字体组合框。如果创建组合最常使用的控件的自定义选项卡,那么将会添加字体组合框控件。
(1)创建一个新的.xlsx文件,并将其保存为Excel Built In comboBox 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“>
<comboBox idMso=“Font“/>
<comboBox idMso=“FontSize“/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
下图为上述代码创建的组。
6、创建自定义组合框控件
本例中,假设您已经隐藏了完整的用户界面。此外,也试图使应用程序看起来不太像Excel,因为隐藏了所有的工作表标签。然而,您仍然想用户能够在三个工作表之间移动,因此需要提供一些手段来实现这项操作。在许多情形下,组合框控件是能够用于这类导航的理想的控件:列出应用程序中所有的“页面”,允许用户输入其希望跳转到的页面。
(1)新建一个工作簿,以.xlsm为扩展名保存后关闭。
(2)在CustomUI Editor中打开该工作簿,并输入下列XML代码:
<customUI xmlns=“http://schemas.microsoft.com/office/2006/01/customui“>
<ribbon startFromScratch=“false“>
<tabs>
<tab id=“rxtabDemo“
label=“Navigation“
insertBeforeMso=“TabHome“>
<group id=“rxgrpNavigate“
label=“Navigate To“>
<comboBox id=“rxcboSelectSheet“
label=“Activate:“
onChange=“rxcboSelectSheet_Click“>
<item id=“rxitemcboSelectSheet1“
label=“Sheet1“/>
<item id=“rxitemcboSelectSheet2“
label=“Sheet2“/>
<item id=“rxitemcboSelectSheet3“
label=“Sheet3“/>
</comboBox>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
注意到该组合框利用onChange回调来产生当选择项目时的行为。此外,该组合框包含三个项目:Sheet1、Sheet2、Sheet3。这些项目是静态的并且不能从文件中修改,用户也不能添加其它项目,这确保了用户仅能在这三个工作表之间导航。
生成回调签名,并复制代码后关闭CustomUI Editor。
在Excel中打开该工作簿,打开VBE并将代码粘贴到一个标准模块中。下面编辑该回调以响应希望的操作。这时,可以通过考虑事件的顺序来解决如何实现:
(1)用户从工作表列表中选择一个项目。
(2)触发回调。
(3)将组合框中所选择的值(即工作表的名字)传递到程序。
(4)激活工作表。
然而,如果用户在组合框中输入值,会发生什么呢?要处理这些可能发生的事,应该编辑回调签名如下:
‘rxcboSelectSheet onChange回调
SubrxcboSelectSheet_Click(control As IRibbonControl, text As String)
On Error Resume Next
Worksheets(text).Activate
If Err.Number <> 0 Then
MsgBox “对不起,不存在这个工作表!”
End If
End Sub
第2行代码试图激活传递给回调的名称的工作表。从列表中选择的项目总是有效的名字,而由用户输入的文本可能与列表中的项目不匹配。在开始部分的On Error语句告诉代码即使发生错误也继续运行下一行代码。
如果Err属性不为零,那么一定是发生了错误,因此用户输入的值是无效的。此外,因为希望让用户知道其输入是不可接受的,所以包括了一个消息框。
现在,就可以测试了:可以从组合框中选择一个值(如下图所示),也可以输入一个值。