细品RibbonX(23):comboBox控件详解

来源:互联网 发布:怎样解析域名 编辑:程序博客网 时间:2024/05/01 12:50

组合框控件基于指定的记录源显示数据,它是编辑框和下拉控件的组合。该控件最明显的特征之一是:不仅能够从列表中选取项目,而且能够在其中输入项目。

comboBox控件常用于下列情形:

n         列表非常长,希望用户在输入一些关键词后能够迅速跳到合适的地方。(例如fonts控件)

n         希望呈现给用户一个预定义列表,同时也希望能够在列表中添加项目。

可以使用静态列表或动态创建列表来填充组合框。

1comboBox元素必需的属性

组合框控件需要下表1所列的id属性之一。

1comboBox元素必需的属性

属性

何时使用

id

当创建自已的组合框时

idMso

当使用现有的Microsoft组合框时

idQ

当在命名空间之间创建共享的组合框时

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

组合框控件可以使用下表2列出的任一insert属性。

2comboBox元素可选的insert属性

INSERT属性

允许值

默认值

何时使用

insertAfterMso

有效的Mso

在组末尾插入

Microsoft控件之后插入

insertBeforeMso

有效的Mso

在组末尾插入

Microsoft控件之前插入

insertAfterQ

有效的组idQ

在组末尾插入

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

insertBeforeQ

有效的组idQ

在组末尾插入

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

也可以为组合框设置下表3所列的任何或所有的属性或回调。

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

静态属性

动态属性

允许值

默认值

动态属性的VBA回调签名

none

onChange

14096个字符

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

11024个字符

none

Sub GetImage(control As

IRibbonControl,

ByRef returnedVal)

imageMso

getImage

11024个字符

none

同上

none

getItemCount

11024个字符

none

Sub GetItemCount(control As

 IRibbonControl,

ByRef returnedVal)

none

getItemID

11024个字符

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

11024个字符

none

Sub GetItemLabel(control As IRibbonControl,

index As Integer,

ByRef returnedVal)

none

getItemScreentip

11024个字符

none

Sub GetItemScreenTip(control As IRibbonControl,

index As Integer,

ByRef returnedVal)

none

getItemSupertip

11024个字符

none

Sub GetItemSuperTip(control As IRibbonControl,

index As Integer,

ByRef returnedVal)

keytip

getKeytip

13个字符

none

Sub GetKeytip(control As                                             IRibbonControl,

ByRef returnedVal)

label

getLabel

11024个字符

none

Sub GetLabel(control As 

IRibbonControl,

ByRef returnedVal)

maxLength

none

11024个字符

1024

none

screentip

getScreentip

11024个字符

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

11024个字符

12

none

supertip

getSupertip

11024个字符

(none)

Sub GetSupertip(control

 As IRibbonControl,

ByRef returnedVal)

tag

(none)

11024个字符

(none)

(none)

none

getText

14096个字符

none

Sub GetText(control As

IRibbonControl,

ByRef returnedVal)

visible

getVisible

true,false,1,0

true

Sub GetVisible(control

As

IRibbonControl,

ByRef returnedVal)

3comboBox元素允许的子对象

comboBox元素可以使用的唯一的子对象是item元素。

4comboBox元素的父对象

在下列任何控件内都能放置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>

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

comboboxsample1

 

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回调来产生当选择项目时的行为。此外,该组合框包含三个项目:Sheet1Sheet2Sheet3。这些项目是静态的并且不能从文件中修改,用户也不能添加其它项目,这确保了用户仅能在这三个工作表之间导航。

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

Excel中打开该工作簿,打开VBE并将代码粘贴到一个标准模块中。下面编辑该回调以响应希望的操作。这时,可以通过考虑事件的顺序来解决如何实现:

1)用户从工作表列表中选择一个项目。

2)触发回调。

3)将组合框中所选择的值(即工作表的名字)传递到程序。

4)激活工作表。

然而,如果用户在组合框中输入值,会发生什么呢?要处理这些可能发生的事,应该编辑回调签名如下:

‘rxcboSelectSheet onChange回调

Sub rxcboSelectSheet_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属性不为零,那么一定是发生了错误,因此用户输入的值是无效的。此外,因为希望让用户知道其输入是不可接受的,所以包括了一个消息框。

现在,就可以测试了:可以从组合框中选择一个值(如下图所示),也可以输入一个值。

comboboxsample2

相关文章

  • 细品RibbonX(22):item元素详解
  • 细品RibbonX(21):toggleButton控件详解
  • 细品RibbonX(20):editBox控件详解
  • 细品RibbonX(19):checkBox控件详解
  • 细品RibbonX(18):button控件详解
  • 细品RibbonX(16):RibbonX开发基础问答
  • 细品RibbonX(15):回调(CallBacks)
  • 细品RibbonX(14):核心的OpenXML架构元素
  • 细品RibbonX(13):初识XML
  • 细品RibbonX(9):层次分明的RibbonX代码结构
原创粉丝点击