当我打开表单时,我突然收到一条错误消息:
“阅读表单错误:'X'”
缓存未初始化。必须先调用TCache.Initialise。忽略错误并继续?注意:忽略该错误可能导致组件被删除或属性值丢失“
“Cache not initialised”位是我们其中一个类引发的异常。
我的第一个问题是,为什么Delphi IDE在没有我要求“运行程序”的情况下运行我的代码?它运行的代码是什么?有什么办法可以解决这个问题吗?
其次,有没有什么办法可以在调试器中捕获这个错误,所以我可以找出调用堆栈中发生此异常的位置?我已经尝试在抛出异常的地方放置一个断点,但Delphi忽略了它。
而且,一旦我找到了这个异常的来源,有没有办法告诉我什么时候处于“设计模式”而不运行该代码,或运行不同的代码?或者甚至更好,如果在设计模式下,根本不运行该代码? [更新:请参阅Francois关于如何在设计模式下停止代码运行的答案。]
答案 0 :(得分:4)
您有一些组件代码,您在IDE尝试加载dfm时执行该代码。
如果您的组件处于“设计模式”
,则可以在代码中进行测试 if (csDesigning in ComponentState) then
答案 1 :(得分:4)
当IDE加载DFM时,它会在表单设计器中创建活动对象,这意味着组件运行时代码实际上是在IDE中运行的。因此,如果组件代码想要在设计时跳过其代码的运行部分,则需要检查TComponent.ComponentState
属性csDesigning
标志。