为什么下面的代码没有遍历ListView?
for x := 1 to ListView1.Items.Count do
Begin
PName := ListView1.Items.Item[i].Caption;
Variable := ListView1.Items.Item[i].SubItems[0];
Val := ListView1.Items.Item[i].SubItems[1];
ToFIle(PName, Variable, Val);
End;
答案 0 :(得分:7)
x
,但您在循环体内使用i
。 0
运行到Count-1
。 其他一些观点:
x
不是整数索引的一个很好的变量名。使用i
或index
。Item
的{{1}}属性是默认属性,因此省略该属性可以简化您的代码。我会写代码应该是这样的:
TListItems
或者通过参考每个项目,从而避免重复:
var
i: Integer;
PName, Variable, Val: string;
....
for i := 0 to ListView1.Items.Count-1 do
begin
PName := ListView1.Items[i].Caption;
Variable := ListView1.Items[i].SubItems[0];
Val := ListView1.Items[i].SubItems[1];
ToFIle(PName, Variable, Val);
end;
或者使用var
i: Integer;
Item: TListItem;
PName, Variable, Val: string;
...
for i := 0 to ListView1.Items.Count-1 do
begin
Item := ListView1.Items[i];
PName := Item.Caption;
Variable := Item.SubItems[0];
Val := Item.SubItems[1];
ToFIle(PName, Variable, Val);
end;
循环而不需要关心列表项的索引:
for/in
答案 1 :(得分:1)
如果使用循环变量x
但是在循环i
内,如何迭代。
这一个:
for x := 1 to ListView1.Items.Count do
不正确,因为你永远不会到达第一个元素。请改为:
for x := 0 to ListView1.Items.Count - 1 do
Begin
PName := ListView1.Items.Item[x].Caption;
Variable := ListView1.Items.Item[x].SubItems[0];
Val := ListView1.Items.Item[x].SubItems[1];
ToFIle(PName, Variable, Val);
End;