3

当我打开一个表单时,我突然收到一条错误消息:

“错误读取表格:'X'”

缓存未初始化。必须先调用 TCache.Initialise。忽略错误并继续?注意:忽略错误可能会导致组件被删除或属性值丢失”

“缓存未初始化”位是我们的一个类引发的异常。

我的第一个问题是,为什么 Delphi IDE 运行我的代码而没有我要求它“运行程序”?它运行什么代码?有什么办法可以关闭它吗?

其次,有什么办法可以在调试器中捕获这个错误,这样我就可以找出这个异常在调用堆栈中发生的位置?我尝试在抛出异常的地方放置一个断点,但 Delphi 忽略了它。

而且,一旦我弄清楚了这个异常的来源,有没有办法告诉我什么时候处于“设计模式”而不运行该代码,或者运行不同的代码?或者更好的是,如果在设计模式下根本不运行该代码?[更新:请参阅 Francois 对如何停止在设计模式下运行代码的回答。]

4

2 回答 2

4

您编写了一些在 IDE 尝试加载 dfm 时执行的组件代码。

如果您的组件处于“设计模式”,您可以在代码中进行测试

  if (csDesigning in ComponentState) then
于 2012-06-07T02:16:39.587 回答
4

当 IDE 加载 DFM 时,它会在表单设计器中创建活动对象,这意味着组件运行时代码实际上是在 IDE 中运行的。因此,如果组件代码想要在设计时跳过其代码的运行部分,则需要检查标志的TComponent.ComponentState属性。csDesigning

于 2012-06-07T06:41:54.593 回答