我有一个有趣的错误需要修复。我已经准备好几个解决方案,但在实施其中一个之前,我想问一下为什么会发生这样的错误。我问的原因是因为我无法复制这个错误,所以我正在实施一个故障恢复解决方案。
我得到的错误是在一个TList
对象上:“ [EListError] List index out of bounds (0) ”。TList
包含一些我们使它们不可见的TForm
对象,然后在该操作之后将它们添加到TList
右侧。现在我们想让它们再次可见并释放,然后为零TList
。当我们想让表单再次可见时会发生错误。
所以有一个循环,并且TList.Count
有一个值。代码进入循环并发生上述错误。上面的错误不是意味着特定索引处没有项目但列表计数大于零,这怎么可能?
这里唯一不寻常的可能是 for 循环倒计时,以便我们以相反的顺序显示表单。
for ii := FormListObject.Count - 1 downto 0 do begin
// Error happens here
TForm(FormListObject[ii]).Show;
end;
您认为这是 gui 线程问题、子项问题还是某种形式的表单被破坏/杀死并且列表中的引用无效?我仍然认为这个错误意味着索引 0 处没有 TList 项,死引用应该触发访问冲突错误,不是吗?