03
2012
04

控件的使用--控件数组

控件数组在这里作为一个章节专门介绍,主要是控件数组应用比较广泛,用控件数组来解决问题有时会给我们带来很多的方便。控件数组和我们前面所学的数据类型中的数组在意义上很相似,不过它要和具体的控件对象结合起来。
控件数组是一组具有共同名称和类型的控件。他们的事件过程也相同。一个控件数组至少应有一个元素,元素数目可在系统资源和内存允许的范围内增加。在控件数组中可用到的最大索引值为32767。同一个控件数组中的元素可以有自己的属性设置。常见的控件数组的应用是实现选项按钮的分组和菜单控件。
(1)在设计时创建控件数组(主要有3种方式来创建控件数组)
①将相同的名字标识符赋予多个控件的Name属性。
假设我们要创建一个名字为Command1的命令按钮控件数组,先将第一个命令按钮的Name属性设为“Command1”,再将其他的命令按钮控件的Name属性也设为“Command1”,当将第2个命令按钮控件的Name属性设为“Command1”时,屏幕上会出现如图8.20所示的提示对话框,询问你是否同意创建一个控件数组。此时,你单击“是”按钮时,就创建了一个控件数组。

图8.20 创建控件数组的对话框
②复制现有的控件并将其粘贴到窗体上。
③将控件的Index属性设置为非Null。
其中,第一种方法最常用;第2种方法操作方便简单,和方法1类似;第3种方法使用时要小心,可能你创建的不是一个控件数组,而是多个,一般不用此方法。
(2)运行时添加控件
在运行时,可用Load和Unload语句添加和删除控件数组中的控件。然而,添加的控件必须是现有控件数组的元素,必须在设计时创建一个Index属性为0的控件。例如,要在程序运行时添加一个如图8.21所示的控件数组,可以先在窗体上创建一个命令按钮(Command1),同时设置其Index属性为0。

图8.21 运行时添加的控件数组
过程代码如下:
Private Sub Form_Load()
Command1(0).Visible = False
For i% = 1 To 4
Load Command1(i)
Command1(i).Visible = True
Command1(i).Top = Command1(i - 1).Top
Command1(i).Left = Command1(i - 1).Left + Command1(i - 1).Width
Command1(i).Caption = "元素" + Str(i)
Next i
End Sub
(3)Index参数的意义
控件数组的事件过程中有一个Index属性,如在Command1_Click()事件过程的第一行代码是这样的:Private Sub Command1_Click(Index as Integer)。这里的Index返回或设置唯一地标识控件数组中一个控件的编号。
因为控件数组元素共享同一个Name属性设置,所以必须在代码中使用Index属性来指定数组中的一个特定的控件。Index必须以整数的形式(或一个能计算出整数的数字表达式)出现在紧接控件数组名之后的圆括号内,如Command1(2)。同时,要注意的是,要从控件数组中删除一个控件,需改变控件的Name属性设置,并删除该控件的Index属性设置。
下面就来看一个控件数组的示例应用程序:



例8.13 设计一个拨号盘程序。要求:命令按钮数组构成数字键,单击数字键以后,文本框就输出相应的号码;单击“重拨”按钮以后,再现原来的拔号过程(提示:再现过程由定时器实现);定时器的时间间隔为0.5秒;文本框最多接受10个字符;宋体、粗体、16磅、蓝色字;
1)界面设计。
拖动10个命令按钮(这10个命令按钮的对象名都是Command1,构成一组控件数组)和一个文本框到窗体上来,如图8-22。调整好各控件的位置,设置各控件属性如表8-10所示。
表8-10 属性设置
对象 属性 设计时属性值 说明
Command1(0)-command1(9) Caption 0-9 Command1为控件数组、数组元素为Command1(0)-command1(9)
Command1(0)-command1(9) Index 0-9
Command2 Caption 重拨
Text1 Text 空值
Text1 Font 宋体、粗体、16磅
Text1 ForeColor 蓝色
Text1 Alignment 1 右对齐
Form1 Caption 拔号盘
2)代码设计:
Dim s As String, i As Integer
Private Sub Command1_Click(Index As Integer)
Text1.Text = Text1.Text + Command1(Index).Caption '拨号
s = Text1.Text '将已拨号的数暂存到s中
End Sub
Private Sub Command2_Click()
'按重拨键后定时器开始工作
Timer1.Enabled = True
Text1.Text = ""
i = 1
End Sub
Private Sub Form_Load()
Timer1.Enabled = False
Timer1.Interval = 500
i = 1
Text1.MaxLength = 10
End Sub
Private Sub Timer1_Timer()
Text1.Text = Text1.Text + Mid(s, i, 1) '重现拨号过程
i = i + 1
End Sub
« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。