6.15 控件数组
在Visual Basic应用程序中,经常会出现几个相同类型的控件执行相似功能的情况,也就是控件的代码基本相同。如例6-2中,如果供用户选择的个人爱好选项比较多,则逐一判断的方法就比较烦琐。通过观察不难发现,每个复选框的判断都是一样的,只是换了一个名字。
例6-3中,如果供用户选择的民族比较多,则判断起来也会出现此问题。有没有更好的办法来处理类似问题呢?针对此问题,Visual Basic提供了控件数组。
控件数组由一组相同类型的控件组成,这些控件共用一个相同的控件名(即控件数组中所有控件的Name属性相同),控件数组中的每个控件元素都有唯一的索引号(Index属性)。
控件数组中各元素的引用和普通数组一样,都是通过数组名和下标来实现的。控件数组的数组名就是数组中控件共同的控件名(Name属性),下标就是每个控件元素唯一的索引号(Index属性)。例如,Option1(0)引用了控件数组Option1中下标为0的元素。
控件数组中任意一个控件的事件都将触发整个控件数组的事件,不再作为单独控件的事件处理。也就是说,如果建立了一组单选按钮的控件数组,那么无论单击哪个单选按钮,都将触发整个控件数组的Click事件。为了区分是控件数组中哪个控件产生的事件,Visual Basic将产生事件控件的索引号作为参数传递给控件数组的事件过程。
未采用控件数组的Option1控件的Click事件,没有形式参数:
而采用了控件数组的Option1控件的Click事件,在形参位置增加了一个Index参数:
创建控件数组的常用方法有以下两种(这里以单选按钮为例)。
方法1:首先在窗体上创建一个单选按钮,然后把该按钮的Index属性值设为0,这样虽然只有一个对象,但是它已经是控件数组了。选中这个单选按钮,然后复制、粘贴,每次粘贴操作都会创建一个控件数组元素,其下标从0开始依次递增。
方法2:首先在窗体上创建一个单选按钮,不修改Index值,而是直接采用复制、粘贴的方法。这种方法与上一种不同之处在于,在第一次粘贴操作时,系统会弹出提示框,如图6-18所示。如果选择“是”,则系统自动创建Option1控件数组,再次粘贴时,系统将不再提示,而是直接创建控件数组。
图6-18 创建控件数组
如果已经创建了多个单选按钮,要把它们改为控件数组,只需要把它们改为相同的名字即可。例如,已有3个按钮Option1、Option2、Option3,想把它们创建成名称为Option1的控件数组,则只需要把Option2的名称改为Option1,这时系统同样会弹出提示框,选择“是”即可。接下来再修改Option3的名称时,系统将不再提示。
【例6-11】利用单选按钮控件数组和框架实现民族与性别选择。
分析:创建Option1控件数组,用于民族选择;创建Option2控件数组,用于性别选择。
完整代码如下。
运行结果如图6-19所示。
图6-19 单选按钮控件数组示例
在例6-11的Command1按钮的Click事件过程中,采用循环的方法检测控件数组中的哪个单选按钮被选中。如果检测到,则执行Exit For退出循环,因为单选按钮在一组中只能选择一个。
也可以采用如下方法实现。
【例6-12】利用复选框控件数组实现爱好选择。
分析:创建复选框控件数组,名称为aihao(这里给控件数组改名,是为了方便在代码中引用,一般在程序开发中,应根据需要把对象改为方便引用的名字),效果如图6-20所示。
图6-20 复选框控件数组示例
完整代码如下。