6.5.1 控件数组的概念
如果在应用程序中用到一些类型相同且功能类似的控件,则可将这些相同的控件视为一个数组 ----" 控件数组 " 。控件数组的使用类似数组变量的使用,也具有如下的特点 :
1 ) 相同的名称 (Name) 。
2 ) 以下标索引值 (index) 来识别各个控件。
控件数组是很有用的,使用控件数组添加控件所消耗的资源比直接向窗体添加多个相同类型的控件消耗的资源要少。当有若干个控件执行大致相同的操作时,控件数组共享同样的事件过程,在程序运行中,可以利用返回的索引值来识别事件是由哪个控件所引发的。
6.5.2 控件数组的建立
设计时有 3 种方法创建控件数组 :
1) 将相同名字赋予多个控件。
2) 复制现有的控件并将其粘贴到窗体上。
3) 将控件的 index 属性设置为非 Null 数值。
6.5.3 控件数组的使用
例 7 :在例 4 中使用命令按钮控件数组。
修改 Command1 的 Click 事件代码。
删除原有 Command2 与 Command3 的事件过程代码。
程序代码:
Dim a(1 To 10) As String, b(1 To 10, 1 To 4) As Integer
Private Sub Command1_Click(Index As Integer)
k = Index
Select Case k
Case 0
t = " 数学的平均分为: "
Case 1
t = " 语文的平均分为: "
Case 2
t = " 外语的平均分为: "
End Select
s = 0
For n = 1 To 10
s = s + b(n, k + 1)
Next
s = s / 10
p = ""
For n = 1 To 10
If b(n, 1 + k) < s Then p = p & a(n) & " "
Next
MsgBox " 低于平均分的同学有: " & Chr(13) & Chr(13) & p, 0, t & s
End Sub
Private Sub Form_Activate()
For n = 1 To 10
List1.AddItem a(n), n - 1
b(n, 4) = b(n, 1) + b(n, 2) + b(n, 3)
Next
Text1.Text = "": Text2.Text = "": Text3.Text = "": Text4.Text = ""
End Sub
Private Sub Form_Load()
a(1) = " 陈高阳 ": b(1, 1) = 89: b(1, 2) = 85: b(1, 3) = 91
a(2) = " 赵世杰 ": b(2, 1) = 75: b(2, 2) = 78: b(2, 3) = 84
a(3) = " 李民雄 ": b(3, 1) = 64: b(3, 2) = 82: b(3, 3) = 72
a(4) = " 马英丽 ": b(4, 1) = 88: b(4, 2) = 68: b(4, 3) = 64
a(5) = " 杨广民 ": b(5, 1) = 79: b(5, 2) = 79: b(5, 3) = 87
a(6) = " 李灵君 ": b(6, 1) = 91: b(6, 2) = 88: b(6, 3) = 87
a(7) = " 陈吉至 ": b(7, 1) = 68: b(7, 2) = 73: b(7, 3) = 64
a(8) = " 王东明 ": b(8, 1) = 58: b(8, 2) = 68: b(8, 3) = 65
a(9) = " 姜大伟 ": b(9, 1) = 76: b(9, 2) = 81: b(9, 3) = 88
a(10) = " 吴晓林 ": b(10, 1) = 78: b(10, 2) = 89: b(10, 3) = 82
End Sub
Private Sub List1_Click()
n = List1.ListIndex + 1
Text1.Text = b(n, 1)
Text2.Text = b(n, 2)
Text3.Text = b(n, 3)
Text4.Text = b(n, 4)
End Sub
执行结果同例 4 。
例 8 :使用控件数组可以使例 3 的“排序”更加生动。
程序代码:
Dim a(10) As TextBox
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
Command1(0).Enabled = False
For i = 0 To 9
a(i).BackColor = RGB(255, 0, 255)
Label2.Caption = " 以 A(" & Trim(i) & ") 为擂主与后边的元素依次比较,如有比 A(" & _
Trim(i) + ") 小者,则与 A(" & Trim(i) & ") 交换。 "
For j = i + 1 To 9
a(j).BackColor = RGB(255, 0, 255)
MsgBox " 比较 A(" & Trim(i) & ") 和 A(" & Trim(j) & ")", , " 比较法排序 "
If Val(a(i).Text) > Val(a(j).Text) Then
MsgBox " 交换 A(" & Trim(i) & ") 和 A(" & Trim(j) & ")", , "A(" & Trim(i) & _
")>A(" & Trim(j) & ")"
t = a(i).Text: a(i).Text = a(j).Text: a(j).Text = t
End If
a(j).BackColor = RGB(255, 255, 255)
Next j
a(i).BackColor = RGB(0, 255, 0)
Next i
Label2.Caption = ""
Frame1.Height = 1000
Case 1
Form_Activate
Command1(0).Enabled = True
End Select
End Sub
Private Sub Form_Activate()
Randomize
For i = 0 To 9
Set a(i) = Text1(i)
a(i).Text = Int(Rnd * 199) - 99
a(i).BackColor = RGB(255, 255, 255)
Next
Frame1.Height = 2556
End Sub
执行结果:



|