Delphi 无法通过TListView进行迭代

Delphi 无法通过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);

为什么下面的代码没有遍历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;

如果使用循环变量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