VB6中直接引用窗体类名而非对象变量的原理探究
VB6窗体类的预声明变量与Load语句解析
窗体类的预声明全局变量机制
VB6中每个窗体类都会自动生成一个预声明的全局对象变量,变量名和窗体类名完全相同。这个变量属于全局作用域,无需通过Dim声明就能直接引用,本质是该窗体类的一个默认实例。
你测试的两种调用方式的区别:
- 直接用
frmMyForm.Show:操作的是系统预声明的那个默认实例,全程只会有这一个实例存在。 - 用
Set foo = New frmMyForm:手动创建了一个全新的独立窗体实例,多次执行该语句会生成多个互不干扰的窗体实例。
Load语句的必要性
Load语句的作用是将窗体加载到内存(完成控件初始化、触发Form_Load事件),但不会显示窗体。而当你调用Show方法时,如果窗体尚未被加载,VB6会自动先执行Load操作,再显示窗体。
所以如果你的需求只是显示窗体,单独调用frmMyForm.Show完全可行,Load语句并非必需。只有当你需要提前将窗体加载到内存(比如预加载资源、后台完成初始化逻辑)时,才需要单独调用Load语句。
VB6与VBA的差异补充
在窗体预声明变量这一机制上,VB6和VBA基本一致,但VB6的标准EXE工程支持自定义Sub Main作为入口,而VBA通常依附于Office等宿主程序,不过核心的窗体实例创建逻辑没有本质区别。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

