正象声明和使用任何数据类型的数组那样,也能够声明和使用对象类型的数组。这些数组既可以是固定大小的,也可以是动态的。
与声明其它任何类型数组的方法相同,可以使用 Private、Dim、ReDim、Static 或 Public 声明窗体数组。如果数组声明使用了 New 关键字,则当使用该数组的元素时,Visual Basic 将自动为数组中每个元素创建一个新窗体实例。
Private Sub Command1_Click () Dim intX As Integer Dim frmNew(1 To 5) As New Form1 For intX = 1 To 5 frmNew(intX).Show frmNew(intX).WindowState = vbMinimized '
为了不让它们第一次以正常大小出现而'
创建最小化窗体,可改变'
上面两行的顺序。Next
End Sub
按命令按钮执行上述代码,将建立五个最小化的 Form1 实例。
注意 如果查看任务栏,可看到六个 Form1。额外的 Form1 实例不是最小化的- 它是刚开始使用的那个。
与声明任何其它类型数组的方法相同,可以使用 Private、Dim、ReDim、Static 或 Public 声明控件数组。然而与窗体数组不同,控件数组不能使用 New 关键字声明。例如,可以声明数组为特定的控件类型:
ReDim ActiveImages(10) As Image
当声明数组为特定控件类型时,只能将该类型的控件赋给数组。例如,在前面的声明中,只能将图像控件赋给该数组- 但是这些图像控件可以来自不同的窗体。
将其与内置 Controls 集合进行比较,内置 Controls 集合能包含很多不同类型的控件- 所有这些控件必须在同一窗体中。
另外,可以声明类属控件变量数组。例如,若要跟踪拖放到某一特定控件中的每个控件,而且不允许任何控件被拖放多次。通过对控件变量的动态数组的管理可以做到这点,只要让该动态数组包含每个被拖放控件的引用即可。
Private Sub List1_DragDrop(Source As VB.Control, _ X As Single, Y As Single) Dim intX As Integer Static intSize As Integer Static ctlDropped() As Control For intX = 1 To intSize '
如果数组中有被拖放的控件,则它'
已经被拖放到这儿一次。If ctlDropped(intX) Is Source Then
Beep
Exit Sub
End If
Next
'
扩展数组。intSize = intSize + 1
ReDim Preserve ctlDropped(intSize)
'
保存被拖放控件的引用。Set ctlDropped(intSize) = Source
'
给列表框添加控件名。List1.AddItem Source.Name
End Sub
该示例使用 Is 操作符将控件数组中的变量和控件参数进行比较。Is 操作符可用来测试 Visual Basic 对象引用的一致性:如果两个不同引用的比较结果为同一对象,Is 操作符返回 True。
该示例还使用 Set 语句将 Source 参数中的对象引用赋予数组中的元素。
详细信息 请参阅《语言参考》中的“Is 操作符”。
在“编程基础”的“数组”和“动态数组”中介绍数组。
关于跟踪对象的更简易的方法,请参阅本章后面的“创建对象集合”。