我尝试编译VB6应用程序,但它失败,错误,“运行时错误‘91’:对象变量或带块变量未设置”。 事实证明,用户控件编译期间发射并调用试图访问尚未实例又一个目标代码的Resize事件。
为什么事件编译期间发射,是有什么办法阻止它?
编辑 :我有一些代码在这里,但它是不相关的。 这个问题源于一个事实,即用户控件的代码(即初始化,ReadProperties,调整大小和WriteProperties事件)可以在意外的时间执行结果。 如果在这些事件的代码依赖于其他代码来初始化它的任何数据结构,还有它会失败,因为在初始化代码可能没有执行一个很好的机会。 特别是在编译期间没事的时候是应该执行! 我称之为一个错误,但我敢肯定,微软可以以某种合理的。
这里是用户控制的事件生命周期的好文章
理解控件的存活期和关键事件
这里是一个片段
编译项目
当项目被编译成一个应用程序或组件,Visual Basic中加载所有形式的文件不可见,一个又一个,为了将信息写入它们包含到编译的文件。 控件实例得到初始化,ReadProperties和WriteProperties事件。 该控件的属性设置被编译成成品可执行文件。
它没有提到调整大小(它在运行过程中或在您调整在设计时一个容器上的用户控件发生)。 也许你的初始化事件是在调整用户控件?
为了避免在有问题的对象做任何事情之前已经创建可以检查错误:
If Not Object Is Nothing then
do something
我认为对于用户控件的一些事件得到在设计时至少以一致的方式使它们的目的执行。