无法通过TListView迭代

时间:2016-04-15 09:16:39

标签: 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);
  End;

2 个答案:

答案 0 :(得分:7)

  • 您的循环变量为x,但您在循环体内使用i
  • 你迭代错误的索引。按照惯例,德尔福的指数从零开始。您的循环应该从0运行到Count-1

其他一些观点:

  • x不是整数索引的一个很好的变量名。使用iindex
  • 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;