对象之间的关系
在同一窗体上放置两个命令按钮时,它们是两个具有不同 Name 属性设置值(Command1 和 Command2)的分开的对象,但都分享同一个类——命令按钮。
它们也共享这样一个特征,即它们在同一窗体上。在本章前面已看到,窗体上的控件也包含在窗体中。这就把控件放在一个层次上。要引用控件就必须先引用窗体,就如同打电话拨号一样,首先要拨国家/地区号码或区域号码,然后再拨具体的电话号码。
这两个命令按钮也共享这样一个特征,即它们都是控件。所有控件都具有公共特性,使它们不同于窗体以及 Visual Basic 环境中的其它对象。以下章节中将说明 Visual Basic 如何用集合使相关的对象分组。
对象的层次
对象层次提供了一种组织结构,它决定了对象间的相互关系以及访问它们的方法。在大多数情况下不必考虑 Visual Basic 对象的层次。但是:
1.在操作其它应用程序的对象时,应当熟悉那个应用程序的对象层次。关于定位对象层次的信息,请参阅第十章“用部件编程”。
2.在使用数据访问对象时,应当熟悉数据访问对象层次。在 Visual Basic 中,一个对象包含其它对象的一般情况时有发生。下面我们要详细讨论。
使用对象集合
集合对象有自己的属性和方法。对象集合中的对象作为集合的成员被引用。集合中的每个成员从 0 开始顺次编号;这就是成员的索引号。例如,控件集合包含已给定窗体上的所有控件。如果对集合中的所有对象都必须执行相同操作,则可用集合简化代码。
例如,下列代码遍历控件集合,并在列表框中列出每个成员的名字。
Dim MyControl as Control
For Each MyControl In Form1.Controls
'把每个控件的名字送到列表框。
List1.AddItem MyControl.Name
Next MyControl
应用集合成员的属性与方法
有两种通用方法可用来对集合对象成员寻址:
1.指定成员的名称。以下两个表达式等价:
Controls ("List1")
Controls!List1
2.利用成员的索引号:
Controls (3)
一旦能够从整体上对全体成员寻址,而且还能够个别地对单个成员寻址,就可用下面随便一种方式应用属性和方法:
'将 ListBox 控件的 Top 属性设置为 200。Controls!List1.Top = 200
-或者-
Dim MyControl as Control
For Each MyControl In Form1.Controls ()
'将每一个成员的 Top 属性设置为 200。
MyControl.Top = 200
Next MyControl
包含其它对象的对象
在 Visual Basic 中,一些对象包含其它对象。例如,窗体通常包含一个或数个控件。把一个对象当作其它对象的容器,这样做的好处在于,在代码中引用容器即可明了要使用哪个对象。例如,说明在一个应用程序中可有两个不同的窗体,一个用来输入应付帐交易,另一个用来输入应收帐交易。
两个窗口可以有名为 IstAcctNo 的列表框。通过引用包含列表框的窗体就可准确指定要使用的列表框:frmReceivable.lstAcctNo.AddItem 1201
-或者-
frmPayable.lstAcctNo.AddItem 1201
Visual Basic 中的公共集合
在 Visual Basic 中一个对象包含其它对象的一般情况时有发生。下表简要叙述 Visual Basic 中最常用的集合。
在 Visual Basic 中也可实现对象控制。
详细信息 关于对象容器的详细信息,请参阅第八章“再论编程”中的“使用集合替代数组”。关于打印机集合的信息,参阅第十二章“使用文本和图形”。关于窗体集合和控件集合的详细信息,请参阅《Visual Basic 6.0语言参考手册》。
容器属性在窗体内,可用 Container 属性改变对象的容器。以下控件可包含其它控件:
1.Frame 控件
2.PictureBox 控件
3.ToolBar 控件(仅对专业版和企业版而言)
如何在窗体上将命令按钮从一个容器移动到另一个容器,该例对此作了演示。打开新工程,并在窗体上画出 Frame 控件、PictureBox 控件和CommandButton 控件。
下列代码在窗体单击事件中,这些代码使计数器变量增加,并通过 SelectCase 循环使命令按钮在容器之间移动。
Private Sub Form_Click ()
Static intX as Integer
Select Case intX
Case 0
Set Command1.Container = Picture1
Command1.Top= 0
Command1.Left= 0
Case 1
Set Command1.Container = Frame1
Command1.Top= 0
Command1.Left= 0
Case 2
Set Command1.Container = Form1
Command1.Top= 0
Command1.Left= 0
End Selectint
X = intX + 1
End Sub
详细信息 请参阅《Visual Basic 6.0语言参考手册》中的“Container 属性”。
对象之间的通讯
除了在 Visual Basic 中使用和创建对象外,还可与其它应用程序通讯并在自己的应用程序中操作其它应用程序的对象。在应用程序之间共享数据的能力是 Microsoft Windows 操作系统的关键性能之一。有了 Visual Basic,与其它应用程序进行通讯变得极为灵活。
详细信息 关于使用其它应用程序的对象及其通讯的详细信息,请参阅第十章“用部件编程”。
责任编辑:小草