Office中国论坛/Access中国论坛

标题: 窗体中 combobox绑定类模块后,关闭窗体出现卡死现象 [打印本页]

作者: doney88    时间: 2016-7-1 14:51
标题: 窗体中 combobox绑定类模块后,关闭窗体出现卡死现象
这是为什么??
作者: roych    时间: 2016-7-1 15:05
看看窗体的unload事件或者类模块的Class_Terminate()有没有释放类模块。
set xx=nothing之类。
作者: doney88    时间: 2016-7-1 15:17
释放了就可以了是吗?
R神!
类模块本身也可以在类模块中释放自己??
作者: roych    时间: 2016-7-1 16:23
doney88 发表于 2016-7-1 15:17
释放了就可以了是吗?
R神!
类模块本身也可以在类模块中释放自己??

类模块内置有个初始化事件跟一个终止事件的。
作者: ganlinlao    时间: 2016-7-2 11:23
本帖最后由 ganlinlao 于 2016-7-2 11:30 编辑

vba的类,是com的类,它不是普通人们所谈的oop的类,它很特殊。
1、VBA的每一个类,背后都有一个iclassFactory,每一个vba类背后都有一个看不见的类工厂。微软为了方便,让你在写vba的类时,自动帮你写好了类工厂。类工厂也是一个com类,同样也是只有接口(所有的com类包括vba的类都只有接口,不能继承)。iclassFactory当中有一个重要的方法createinstance。这个才是vba类的构造函数,等同于constructor(构造函数)。也就是说VBA的类的构造函数是在外部,而不是在类模块中
Createinstance是可以带参数的构造函数。
2、Class_Terminate()作用等同于类的Deconstructor(析构函数)。析构函数不能重载,而且在每一个类中,必须是唯一的。
无论在任何情况下,当Release一个VBA类时,Class_Terminate()的代码一定会被自动执行。所以析构函数是在VBA类的自身。

3、com是真正的跨语言的,所以com类是无法继承的,c++写的com类,怎么被vba继承呢,怎么被delphi继承呢,这是做不到的。vba的类是com的类,所以vba类永远只有接口,而没有继承。

4、vba的类,只能通过消息机制。两个类才有办法进行通信,而且是异步的消息机制。

一句话:VBA的类由外部构造实例,而由自身销毁自己。

作者: doney88    时间: 2016-7-4 04:43
ganlinlao 发表于 2016-7-2 11:23
vba的类,是com的类,它不是普通人们所谈的oop的类,它很特殊。
1、VBA的每一个类,背后都有一个iclassFac ...

不明觉厉!
作者: doney88    时间: 2016-7-4 04:43
ganlinlao 发表于 2016-7-2 11:23
vba的类,是com的类,它不是普通人们所谈的oop的类,它很特殊。
1、VBA的每一个类,背后都有一个iclassFac ...

不明觉厉!!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3