2016-04-15 8 views
0

次のコードがListViewを反復処理しないのはなぜですか?あなたはループ変数xとしてではなくループi内で使用した場合であるが、反復することができますどのようにTListViewを繰り返し実行できません

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

'for x ...'と '... Item [i] .....'インデックスを '0 'で' count -1'にすることもできます –

答えて

1

そして、この1:あなたが最初の要素に到達することはありませんので、

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; 
7
  • あなたのループ変数がxですが、ループ本体内iを使用:に変更してください。
  • 間違ったインデックスを反復処理します。 Delphiのインデックスは、慣習的にゼロベースです。ループは0からCount-1まで実行する必要があります。

他のいくつかのポイント:

  • xは、整数インデックスのための偉大な変数名ではありません。 iまたはindexを使用してください。
  • のプロパティ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ループを使用していませんリスト項目の索引作成に注意する必要があります。

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; 
関連する問題