VBA控件教程:定制窗体类

2015-06-11 23:24 阅读 85 次 评论关闭

如果说创建类的历史与使用 Visual Basic 编程的历史一样长,也许会感到惊奇。但这是真的:Form1,每次开始一个工程都要碰到的这个老相识,实际上就是一个类。

为了说明这一点,打开一个新的“标准 EXE”工程。添加一个按钮到 From1,并在单击事件中放置如下的代码:

Private Sub Command1.Click()
   Dim f As New Form1
   f.Show
End Sub

按 F5 键运行这个工程,并单击该按钮。啊!出现了 Form1 的另一个实体!单击其中的按钮,又有另一个窗体!所创建的每一个实体看上去都是一样的,并且有同样的表现,因为它们都是 Form1 类的实体。

这里发生了什么事情?

如果已阅读了“编程基础”中的“使用对象”,就会知道一个被声明成“As New”的对象变量,在代码中第一次被引用之前所包含的是“Nothing”。 当变量第一次被使用时,Visual Basic 注意到其中包含特定数值“Nothing”,就要创建一个该类的实例(这也是一件好事,否则 f.Show 将引起错误)。

隐藏全局变量的 Me 和 My

也许会有点奇怪,在代码中怎样就能引用 Form1,它好象是一个对象变量。这并不离奇,Visual Basic 为每一个窗体类创建了一个隐藏的全局对象变量。看起来就象 Visual Basic 向工程添加了下列声明:

Public Form1 As New Form1

当选择 Form1 作为启动对象时,或者在代码中键入 Form1.Show,就引用了这个隐藏的全局对象变量。因为它被声明为“As New”,因此当代码中第一次使用这个预先声明的变量时,将创建 Form1 类的一个实例。

隐藏该声明的理由是每次更改窗体的 Name 属性时,Visual Basic 都要改变它。通过这种方法,隐藏的变量总是与窗体类有同样的名字。

一个小问题

在上述练习中创建的 Form1 的哪一个实例与隐藏的全局变量相关联?如果认为是第一个,则是对的。Form1 是工程的缺省启动对象,对 Visual Basic 而言它和在代码中使用预先声明的全局变量一样。

提示 在一个窗体卸载后,总是必须将对该窗体的任何引用设置为“Nothing”,以便释放其所使用的内存和资源。最经常被忽略的引用是这个隐藏的全局窗体变量。

关于 Form1 的其它实例

在“编程基础”中,已经了解到要引用一个对象,需要一个对象变量,一个对象只有当至少存在一个对象变量包含对它的引用时才能存在。那么,是什么使得其它的实例能够存在呢?

Form1 的第二个实例,及以后的其它实例,都有一个对象变量,只要是调用其 Show 方法时就一直存在。然后该变量退出可见范围,并且被设置为“Nothing”。但是 Visual Basic 保持一个名为 Forms 的特殊的集合,这可以在第六章“创建用户界面”中的“再论窗体”中看到。该 Forms 集合包含了对工程中每一个已被装载的窗体的引用,所以总是可以找到和控制它们。

注意 正如所了解的那样,并不是对所有的类来说都是这样。例如,自己设计的类将不会有隐藏的全局变量或全局集合来跟踪它们- 这些是窗体类的特定功能。但是,可以声明自己的全局变量,也可以创建自己的集合- 就象在“创建自己的集合类”中所描述的那样

版权声明:本文著作权归原作者所有,欢迎分享本文,谢谢支持!
转载请注明:VBA控件教程:定制窗体类 | 猎微网
分类:VBA 标签:, ,

评论已关闭!