Delphi – 当表单的ComponentCount递减时,如何中断

Delphi – 当表单的ComponentCount递减时,如何中断,第1张

概述以下代码从Toolbar2000中复制.它是从INI文件中读取工具栏位置和停靠状态的例程的一部分.我在初始化期间称这个例程.下面的代码迭代主窗体上的所有组件(OwnerComponent)并加载它找到的任何工具栏的设置. for I := 0 to OwnerComponent.ComponentCount-1 do begin ToolWindow := OwnerComponent.Com 以下代码从Toolbar2000中复制.它是从INI文件中读取工具栏位置和停靠状态的例程的一部分.我在初始化期间称这个例程.下面的代码迭代主窗体上的所有组件(OwnerComponent)并加载它找到的任何工具栏的设置.

for I := 0 to OwnerComponent.ComponentCount-1 do begin  ToolWindow := OwnerComponent.Components[I];  //  <------------------------....

这个迭代需要一些时间(秒 – 表单上有1500多个组件),我在显示的点上得到一个范围错误.我已经确定在执行此循环时正在从主窗体的组件中删除一个或多个项目,因此一旦发生这种情况,最终循环会尝试访问一个超过数组末尾的项目(可能最好将其编码为一个“downto”for循环来防止这种情况).

无论如何,我需要找出主要表单丢失组件的位置.谁能给我任何关于如何做到这一点的Delphi 2006调试技巧?我不希望在我的程序中释放任何主要表单组件.

UPDATE

我发现当我在设计时重新定位工具栏的默认停靠位置时,我无意中将它停靠在另一个工具栏上,而不是另一个工具栏所在的停靠站点.我通过从工具栏中删除工具栏来解决问题停靠并将其添加到码头.因此导致问题的安排是:

Dock   Toolbar 1    Control 1    Control 2    Toolbar 2      Control 3      Control 4

并且解决方法是安排他们:

Dock   Toolbar 1    Control 1    Control 2  Toolbar 2    Control 3    Control 4

它仍然指向TB2k代码中的一个错误 – 人们会认为它应该能够处理嵌套的工具栏.

解决方法 除了LIEven的答案,您还可以使用deBUG dcu并在进入循环之前在TComponent.Destroy中设置断点.

在这两种情况下,您都需要检查调用堆栈以查看计数的调用/更改来自何处.

关于断点的一篇非常有趣的文章是由Cary Jensen撰写的:http://caryjensen.blogspot.com/2010/08/breakpoints-with-side-effects.html

总结

以上是内存溢出为你收集整理的Delphi – 当表单的ComponentCount递减时,如何中断全部内容,希望文章能够帮你解决Delphi – 当表单的ComponentCount递减时,如何中断所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1267440.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存