以下代码是从Toolbar2000复制的。它是从一个INI文件中读取工具栏位置和停靠状态的例程的一部分。我在初始化期间调用这个例程。以下代码正在迭代主窗体(OwnerComponent)上的所有组件,并加载它找到的任何工具栏的设置。
for I := 0 to OwnerComponent.ComponentCount-1 do begin
ToolWindow := OwnerComponent.Components[I]; // <------------------------
....
这个迭代需要一些时间(几秒钟-表单上有1500多个组件),并且我在所示点处遇到了一个范围错误。 我已经确定,当这个循环正在执行时,主表单的一个或多个项目正在被删除,因此一旦发生这种情况,循环尝试访问数组末尾之后的一个位置(可能最好将其编码为“downto”for循环来防止这种情况)。
无论如何,我需要找出主窗体失去组件的位置。 有人可以给我任何关于如何在Delphi 2006中进行调试的提示吗? 我不希望在程序的这个点释放任何主要表单组件。
更新
我发现当我在设计时重新定位工具栏的默认停靠位置时,我不小心将其停靠在另一个工具栏上,而不是其他工具栏所在的停靠站点。 我通过将工具栏从其停靠的工具栏中移除并添加到停靠中来解决了问题。 因此,导致问题的安排是:
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代码中的一个错误 - 人们会认为它应该能够处理嵌套工具栏。
for
循环。当你不知道循环需要多少次迭代时,使用while
或repeat
。在每次迭代之后(并且至少进行了一次迭代)重复检查条件,并在每次迭代之前使用while
来检查条件(可能没有任何迭代)。 - Jørn E. Angeltveit