加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oop – VB6是否只允许通过命名其数据类型来引用Form实例作为单例

发布时间:2020-12-17 07:23:43 所属栏目:百科 来源:网络整理
导读:我看到的代码如“卸载frmMain”,我可以告诉frmMain是类型/模块名称,我不认为它也可以同时是“ObjFrmMain”排序的变量名称.尽管如此,此命令确实成功地导致有问题的表单卸载. 那么数据类型是否用作其单个现有实例的别名?或者也许对于它的所有实例? VB6是否对
我看到的代码如“卸载frmMain”,我可以告诉frmMain是类型/模块名称,我不认为它也可以同时是“ObjFrmMain”排序的变量名称.尽管如此,此命令确实成功地导致有问题的表单卸载.

那么数据类型是否用作其单个现有实例的别名?或者也许对于它的所有实例?

VB6是否对数据类型做了类似的事情,而不是从Form派生的数据类型?

解决方法

是的,VB6有奇怪的对象行为.它为您提供了一些处理表单对象的快捷方式.

Load frmMain

…将在该变量名称下加载该表单的单个实例.事实上:

frmMain.lblSomeLabel.Caption = "some caption"

…将加载该实例.然而:

frmMain.SomeStringMember = "some value"

…不会加载表单对象(意味着窗口本身),但是您可以访问这些变量,因此实质上,表单的名称是全局变量.

但是,您可以创建新实例:

Dim newForm As MyForm
Set newForm = New MyForm
newForm.Show vbModal

这将实际创建MyForm的新实例,加载并显示它,因此您可以拥有一个表单的多个实例.

还要注意New关键字中的奇怪之处:

Dim newObject As New MyClass
Set newObject = Nothing
newObject.SomeStringProperty = "some value"

这没有“对象引用未设置…”错误.使用As New语法声明引用变量时,可以通过将对象设置为Nothing来销毁该对象,然后再次引用该变量,它将创建一个新实例.

事实上,这就是形式的真实情况.有一个隐含的:

Dim frmMain As New frmMain

我个人不喜欢使用As New语法,因为它令人困惑和危险.它也有性能损失,相对于:

Dim newObject As MyClass
Set newObject = New MyClass

……但你对表格坚持不懈.

当你调用卸载frmMain时发生的事情是它卸载了窗口(和所有控件)所以这些中的所有数据都消失了,但是对象frmMain仍然在闲逛.因此,即使在卸载它之后,您仍然可以访问任何成员变量和属性.但是,如果有任何引用表单上的任何控件,它将触发隐式Load frmMain.这是VB6中许多细微编程错误的根源,尤其是在您尝试关闭时.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读