【发布时间】:2016-04-03 10:38:59
【问题描述】:
我解决了我的问题,但我需要知道为什么会向我提出这个问题?!
我写了一个项目,将文件加载到listBox,然后一一删除字符串,
但是当我删除 listBox 字符串时,我会遇到这个异常!
列表索引越界 (5) !
我输入这个 for 循环来读取列表框并删除字符串:
for i := 0 to ListBox3.Count -1 do
begin
ShowMessage(ListBox3.Items[i]);
ListBox3.items.Delete(i);
end;
我的问题通过在 for-loop 语句中做一点改变来解决
for i := ListBox3.Items.Count - 1 downto 0 do
begin
ShowMessage(ListBox3.Items[i]);
ListBox3.items.Delete(i);
end;
为什么第一条语句引发了异常,而第二条则正常?
【问题讨论】:
-
一旦执行:
ListBox3.items.Delete(i);你已经改变了列表中有多少元素并且更高元素的位置发生了变化。for循环不会相应地动态更新最终循环索引。您的第二个示例首先从最后一个列表元素开始处理它,因为delete不会影响较低元素的索引。 -
谢谢,现在清楚了。