7

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

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


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

4

2 回答 2

7

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

了解控件生命周期和关键事件

这是一个片段

编译项目

当项目编译成应用程序或组件时,Visual Basic 会一个接一个地无形地加载所有的表单文件,以便将它们包含的信息写入编译后的文件中。控件实例获取 Initialize、ReadProperties 和 WriteProperties 事件。控件的属性设置被编译到完成的可执行文件中。

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

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

If Not Object Is Nothing then
  do something
于 2009-09-08T19:04:37.620 回答
1

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

于 2009-09-08T18:30:15.990 回答