含有类模块的程序

expandtri全部显示

Microsoft Access 中有两种类型的模块:标准模块类模块。在 Microsoft Access 95 中,类模块只存在于与窗体或报表的关联中。而在 Microsoft Access 97 中,它们也存在于“数据库”窗口的“模块”选项卡上。

用类模块创建自定义对象

使用类模块可以创建自定义对象的定义。保存类模块时使用的名称成为自定义对象的名称。而类模块中定义的公用 SubFunction 过程则成为对象的自定义方法;公用 Property LetProperty GetProperty Set 过程成为对象的属性。

在类模块中定义过程以后,就可以通过新建类实例来新建对象。若要新建类实例,需要先使用该类定义的类型声明一个变量。例如,如果类名为 ABasicClass,则可以通过下列方式为其新建实例:

Dim abc As New ABasicClass

当运行包含该声明的代码时,Visual Basic 会新建一个实例,然后就可以通过使用变量 abc 来应用其方法和属性。例如,如果已经自定义了一个名为 ListNames 的方法,则可以通过以下代码应用该方法:

abc.ListNames

Microsoft Access 95 的新增功能:创建窗体类的默认实例

当在“窗体”视图中打开窗体时,不论是通过用户界面还是从 Visual Basic 中,都可以创建该窗体类模块的实例。换句话说,即为该对象分配了一定的内存空间。然后可以像对任何内置对象那样从代码中调用其方法、设置或返回其属性。在“打印预览”中打开报表时也是这样的。

在 Visual Basic 代码中引用窗体时,通常使用窗体类的默认实例。每个窗体的类只有一个默认实例。也可以从 Visual Basic 中为同一窗体的类创建多个实例。当创建窗体类的多个实例时,就创建了非默认实例。

创建窗体的默认实例有四种方法。可以通过以下方法来打开已有窗体:使用用户界面、执行 DoCmd 对象的 OpenForm 方法、调用 CreateForm 方法并将新窗体切换到“窗体”视图、使用 Visual Basic 创建一个 Form 类型的变量来引用默认实例。下面的示例将打开“Employees”窗体,并将 Form 对象变量指向该窗体:

Dim frm As Form

DoCmd.OpenForm "Employees"

Set frm = Forms!Employees

Microsoft Access 还提供一种快捷方式,只需一步就可以打开一个窗体,并引用它的方法或属性或是引用该窗体上一个控件的方法或属性。对窗体的类模块的引用如下例所示:

Form_Employees.Visible = True

Form_Employees.Caption = "New Employees"

当运行该代码时,如果“Employees”窗体尚未打开,Microsoft Access 会先在“窗体”视图中打开“Employees”窗体,然后将窗体的标题设为“New Employees”。只有明确地将窗体的 Visible 属性设为 True (-1),窗体才可见。当调用该代码的过程执行结束,窗体的该实例将被破坏,也就是说会关闭窗体。

如果“Employees”窗体在“设计”视图中打开,那么试图运行该代码时,Microsoft Access 会产生运行时错误。窗体只能在“窗体”视图中打开。

如果使用这种语法在“窗体”视图中对窗体属性或其中一个控件的属性进行更改,则在窗体实例被破坏时这些更改将会丢失。在对“窗体”视图中的窗体更改属性设置时总是这样。必须在“设计”视图中更改窗体属性,然后将更改随窗体一起保存。

创建窗体的多个非默认实例

如果要同时显示多个窗体实例,可以创建多个窗体类的非默认实例。例如,要同时显示雇员和雇员主管的记录,可以创建两个“Employees”窗体类的实例,一个用来显示雇员记录,另一个显示主管记录。

若要从 Visual Basic 中创建窗体类的非默认实例,必须先声明一个以窗体的类模块名称为类型的变量。必须在变量声明中包含 New 关键字。例如,下面的代码将新建一个“Employees”窗体的实例,然后将它分配给一个 Form 类型的变量:

Dim frm As New Form_Employees

该窗体的非默认实例是不可见的,除非明确地设置其 Visible 属性。

当创建该实例的程序执行结束,该实例就会从内存中删除,除非已将表示它的变量声明为模块级变量。因为模块级变量将保留自己的值,直到使用“运行”菜单上的“重新设置”命令或工具栏上的“重新设置”按钮来重新设置它们为止,所以,如果变量已声明为模块级变量,窗体就会一直保持打开状态。

您所设置的任何属性都将影响窗体类的该实例,但不会与窗体一起保存。此外,如果在“设计”视图中打开窗体,就无法新建窗体类的实例。

窗体类的非默认实例不能通过 Forms 集合中的名称来引用,而只能通过索引编号引用,因为可以创建窗体的多个非默认实例,并且每个实例都具相同的名称,因而在 Forms 集合中可以有多个同名的窗体,只有用索引编号才能区分它们。