2009-09-08 71 views
5

我正在尝试编译一个VB6应用程序,但它失败并显示错误“运行时错误'91':对象变量或块变量未设置”。事实证明,用户控件的Resize事件在编译和调用试图访问尚未实例化的对象的代码时触发。为什么在编译VB6应用程序时触发事件?

为什么在编译过程中事件触发,有什么方法可以阻止它?


编辑:我有一些代码在这里,但它是不相关的。由UserControl代码(即Initialize,ReadProperties,Resize和WriteProperties事件)可以在意外时间执行的事实导致问题。如果这些事件中的代码依赖于其他代码来初始化它的任何数据结构,那么它很可能会失败,因为初始化代码可能没有执行。特别是在编译时,什么都不应该执行!我会把这称为一个错误,但我相信微软可以以某种方式理顺它。

+1

这点确实给特定的代码块在你的编译(在调试)?如果是这样,你可以把它粘贴在这里吗?此外,你确定你不是“建造和运行”,它会导致它建立并在试图运行时弹出(因此,运行时错误)? – JasCav 2009-09-08 18:39:51

回答

6

这里的是对用户控件事件

Understanding Control Lifetime and Key Events

的生命周期一个很好的文章在这里是一个片段

编译项目

当项目被编译成一个 应用程序或组件,Visual Basic 不可见地加载所有表单文件, 一个接一个,为了将他们包含的信息写入 编译的文件。控件实例获取Initialize,ReadProperties和WriteProperties事件 。该控件的 属性设置被编译为 已完成的可执行文件。

它没有提到调整大小(这发生在运行时或者在设计时在物理上调整容器上的usercontrol的大小)。也许你的Initialize事件正在调整用户控件的大小?

为了避免在有问题的对象做任何事情之前已经创建可以检查错误:

If Not Object Is Nothing then 
    do something 
+0

另一个片段说,*每当用户运行已安装的应用程序或组件,并加载表单时,控件将接收Initialize,ReadProperties和Resize事件。*如果窗体被隐藏加载,这就可以解释为什么此事件正在触发。 – raven 2009-09-08 19:32:07

1

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

+0

在用户控件的情况下,这包括可能触发事件的UserControl_Initialize()...。 – Brian 2009-09-08 18:34:25

+0

他们可以做的比这更多。请参阅UserControl的EditAtDesignTime属性。 – Bob77 2009-09-08 19:21:07

相关问题