Delphi 无法通过TListView进行迭代
为什么下面的代码没有遍历ListViewDelphi 无法通过TListView进行迭代,delphi,Delphi,为什么下面的代码没有遍历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);
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;
如果使用循环变量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;
循环变量是x,但在循环体中使用i。
您迭代了错误的索引。根据惯例,Delphi中的索引是以零为基础的。循环应该从0运行到计数-1。
其他几点:
对于整数索引,x不是一个很好的变量名。使用i或索引。
TListItems的Item属性是默认属性,因此可以通过省略该属性简化代码。
我会这样写代码:
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循环,不需要关心列表项的索引:
var
Item: TListItem;
PName, Variable, Val: string;
...
for Item in ListView1.Items do
begin
PName := Item.Caption;
Variable := Item.SubItems[0];
Val := Item.SubItems[1];
ToFIle(PName, Variable, Val);
end;
对于x。。。以及……第[i]项。。。。。您可能还希望使用索引0`来计算-1