第六章  数组
双击滚屏  关闭窗口

 

6.5 控件数组

  6.5.1 控件数组的概念
  6.5.2 控件数组的建立
  6.5.3 控件数组的使用

 

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

 

执行结果:

            

                      

            

 
双击滚屏  关闭窗口
 
版权所有数学与信息科学学院