创建对象数组

正象声明和使用任何数据类型的数组那样,也能够声明和使用对象类型的数组。这些数组既可以是固定大小的,也可以是动态的。

窗体变量数组

与声明其它任何类型数组的方法相同,可以使用 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 操作符”。

在“编程基础”的“数组”和“动态数组”中介绍数组。

关于跟踪对象的更简易的方法,请参阅本章后面的“创建对象集合”。