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

rav*_*ven 6 vb6 events compiler-errors

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

为什么在编译期间触发事件并且有什么方法可以阻止它?


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

DJ.*_*DJ. 7

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

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

这是一个片段

编译项目

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

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

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

If Not Object Is Nothing then
  do something
Run Code Online (Sandbox Code Playgroud)