![]() ![]() |
|
VB考试教程:使用对象集合 | |
作者:佚名 文章来源:不详 点击数 更新时间:2008/4/18 14:46:35 文章录入:杜斌 责任编辑:杜斌 | |
|
|
集合是一组相关的对象。 窗体上的对象都被存放于同一文件之中。而且VisualBasic将这些对象视为同一组的成员。在Visual Basic术语中,窗体上的整组对象被称为Controls(控件)集合。Controls(控件)集合是在你打开新窗体和为窗体添加对象而扩展它时自动创建的。每个窗体都有一个Controls(控件)集合。事实上,Visual Basic拥有好几个标准的对象集合供你在编写程序时使用。在这里,我们将学习在使用任何集合时所需的基本技巧。 1、集合标记法 程序中的每个集合都具有自己的名称,这样你就可以在程序代码中作为一个独立单元引用这些集合。例如,包含窗体上的所有对象的集合被称为Controls(控件)集合。 因为在程序中可能有多个窗体,因而有多个Controls(控件)集合,这样,当在一个包含多个窗体的程序中使用Controls(控件)集合时,需要加上窗体的名字。例如,要引用Form1(窗体1)上的Controls(控件)集合,应该在代码中使用如下名称: Form1.Controls 在该标记法中,Form1对象名和Controls(控件)关键字之间的句点使Controls(控件)看上去好象是一种属性,但是Visual Basic程序员将Controls(控件)集合描述为包含在Form1对象中的一个对象。这两种对象之间的关系或者说等级有点儿象路径名中的文件夹,这在后面开始使用应用对象时,将再次看到这种标记法。 除了在程序中可以使用对象和集合以外,Visual Basic还允许你浏览你的系统,寻找其它应用对象并在程序中加以运用。我们将在学习如何使用Visual Basic Object Browser(对象浏览器)时再次探讨这个问题。 2、引用集合中的对象 你可以单独或成组地引用集合中的对象。 (1)单独引用集合中的对象 引用集合中的对象,或者说引用集合中的个别成员有两种方法: 第一种方法就是通过直接在赋值语句中使用对象名来加以引用。例如,语句: Form1.Controls!Label1.Caption = "Employees" 单独列出了Controls(控件)集合中的Label1对象,并将其标题属性设置为“Employees”。惊叹号(!)用来连接Label1对象和Controls(控件)集合。尽管该语句对编译程序来说可能有点儿冗长拗口了,但它却准确地反映出集合中的层次。 第二种处理集合中对象的方法是指定该对象在对象组中的索引位置。VisualBasic按照对象创建的逆向顺序存储集合对象,因此你可以使用对象的“创建顺序”单独引用该对象,或者使用循环来检查数个对象。例如,要想识别窗体中最后创建的对象,你可以指定下标0,比如下面的示例: Form1.Controls(0).Caption = "Business" 该语句将窗体中最后一个对象的Caption(标题)属性设置为“Business”(倒数第二创建的对象下标为1,倒数第三创建的对象下标为2,等等。) (2)成组地引用集合中的对象 这一点将在下面介绍。 3、编写For Each...Next循环 For Each...Next循环设计用来处理集合。 使用集合最大优点是可以有效地处理对象组。尽管你能够引用集合中的单个成员,但是使用集合中对象的最有用方法是将它们作为一组来处理。例如,你可以同时对整个对象集合进行显示、移动、排序、重命名或调整大小等等操作。 要处理这些任务,可以使用For Each...Next的循环逐个处理集合中的所有对象。For Each...Next循环与For...Next循环十分相似。当For Each...Next循环被用于控制集合时,它的语法如下: For Each Control in FormName.Controls process object Next Control 其中: Control是代表集合中当前对象的特殊变量,是对象型变量; FormName是窗体名称,如Form1、Form2等; 循环体用于处理集合中的各个对象。例如,你可以修改集合中这些对象的Enabled、Left、Top、Caption或者Visible等属性,当然也可以在列表框中列出每个对象的名称。 例如,要同时移动窗体上的所有控件,见下面介绍。 4、移动一组对象 例:使用Controls(控件)集合同时将一组对象从窗体的左侧移动到右侧。 该程序使用For Each...Next循环在用户每次单击“Command1”按钮时移动对象。 在窗体上添加几个控件,其中包含Command1命令按钮,键入如下代码: Option Explicit Dim Ctrl As Object 说明:使用For Each...Next循环来调整每个对象的Left属性,这样它们就能够成组地移动。 用户每次单击“Command1”按钮时,该For Each...Next循环都会逐个检查Controls(控件)集合中的对象,并将它们向右移动200 twip(要向左移动200 twip应减去200)。Ctrl变量是集合中当前对象的“替身”,它的属性值与它所代表的对象的属性值相同。在该循环中,对Left属性值的调整控制了对象相对于窗体左部的位置。
注意,每单击一次“Command1”按钮,窗体上的对象都会向右移动一些。同时“Command1”按钮与其它控件一起也向右移动,原因在于该按钮也是Controls(控件)集合的一部分。 有时,集合中的某些对象要求进行特殊处理,如本例中,不希望“Command1”按钮也移动,这就要修改该程序。 具体做法如下。 5、在For Each...Next循环中使用Tag属性 Tag属性使你能够在循环中鉴别需要特殊处理的对象。 如果你想在集合中以与处理其它成员不同的方式处理一个或多个成员,你可以使用Tag属性,即设定你想以不同方式处理的对象的Tag属性。 在ForEach...Next循环中处理各项时,程序读取每个对象的Tag(标记)属性,根据Tag属性的值,程序要么按常规处理该对象,要么给予它特殊处理(将ElseIf语句与If...Then语句一同使用,或者也可以使用Select Case分支结构)。 如上例中,在移动各个控件时,保持“Command1”不动,可将“Command1”对象的Tag属性设置为一个标识量,如“123”或其它(一般为好理解的词),然后代码修改为(红色为添加的部分): Option Explicit Dim Ctrl As Object 说明:If…hen语句查找“123”标记语句,该语句检查每个集合成员的Tag属性,看其值是否是 “123”。如果该循环遇到了这个标记,它就会跳过对当前对象的处理而不是移动这个对象。 6、有用的Visual Basic集合 在应用程序中,除Controls(控件)集合以外,Visual Basic还提供了其它的集合的内置支持,主要还有: (1)窗体集合 程序中所有已加载窗体的集合。通过使用For Each...Next循环,你可以对它们中的一个或多个、或者对包含于它们中的一个或多个对象设置特征。 (2)打印机集合 系统中所有可用打印机的集合。通过使用For Each...Next循环和AddItem方法,你可以在列表框中显示出所有这些可用打印机的名称,然后允许用户选择用于输出的打印机。 (3)数据库集合 与数据访问与数据库管理有关的各种集合。特别有用的数据库集合包括Columns(列)、Container(容器)、Indexes(索引)和Databases(数据库)。 要想学习更多的关于这些集合的知识,请在Visual Basic联机帮助中查询collections关键词。 |
|
![]() ![]() |