Events 为什么在编译VB6应用程序时会触发事件?

Events 为什么在编译VB6应用程序时会触发事件?,events,vb6,compiler-errors,Events,Vb6,Compiler Errors,我试图编译一个VB6应用程序,但由于错误“运行时错误'91':对象变量或未设置块变量”而失败。结果表明,在编译和调用试图访问尚未实例化的对象的代码时,用户控件的Resize事件正在触发 为什么在编译过程中会触发事件?有没有办法阻止它 编辑:我这里有一些代码,但与此无关。问题的原因是UserControl代码(即Initialize、ReadProperties、Resize和WriteProperties事件)可能在意外时间执行。如果这些事件中的代码依赖于其他代码来初始化其任何数据结构,则很有

我试图编译一个VB6应用程序,但由于错误“运行时错误'91':对象变量或未设置块变量”而失败。结果表明,在编译和调用试图访问尚未实例化的对象的代码时,用户控件的Resize事件正在触发

为什么在编译过程中会触发事件?有没有办法阻止它



编辑:我这里有一些代码,但与此无关。问题的原因是UserControl代码(即Initialize、ReadProperties、Resize和WriteProperties事件)可能在意外时间执行。如果这些事件中的代码依赖于其他代码来初始化其任何数据结构,则很有可能会失败,因为该初始化代码可能尚未执行。尤其是在编译过程中,不应该执行任何操作!我认为这是一个bug,但我相信微软能以某种方式将其合理化。

我认为用户控件的某些事件会在设计时执行,至少是为了以一致的方式呈现它们。

这是一篇关于用户控件事件生命周期的好文章

这里有一个片段

编制项目

当项目被编译成 应用程序或组件,Visual Basic 以不可见的方式加载所有表单文件, 一个接一个,为了写作 它们包含在 编译文件。控件实例获取 初始化、读取属性和 WriteProperties事件。控件是 属性设置被编译为 完成的可执行文件

它没有提到resize(在运行时或在设计时物理地调整容器上的usercontrol的大小时发生)。可能您的初始化事件正在调整用户控件的大小

为了避免错误,您可以在执行任何操作之前检查是否创建了有问题的对象:

If Not Object Is Nothing then
  do something

在用户控件的情况下,这包括可能触发事件的UserControl_Initialize()。它们可以做更多的事情。请参阅UserControl的EditAtDesignTime属性。它是否指向编译(调试时)中的特定代码块?如果是的话,你能把它贴在这里吗?此外,您确定您没有“构建并运行”这会导致它构建,然后在尝试运行时爆炸(因此,运行时错误)?另一个代码段说,每当用户运行已安装的应用程序或组件,并加载表单时,控件都会接收初始化、读取属性和调整大小事件。如果窗体是以不可见的方式加载的,这将解释为什么会触发此事件。