0

リストボックスがあり、それにアイテムを追加します。アイテムはファイルのアドレスであり、アイテムはいくつかのプロセスの後に追加され、次のように挿入されます。

Listbox_Browser.Items := myItems;

それらを1つずつ追加しないので、リストボックスの挿入中にそれらをチェックすることはできません。OnDrawでそれらをチェックしようとし、次のようなコードを使用しました。

  Try
    FileOpenandP(Listbox_Browser.Items[Index]);
  Except
    ListBox_Browser.Items.Delete(Index);
  End;

しかし、「リストインデックスが範囲外です」というエラーが発生しました。解決策は何ですか?

4

1 に答える 1

7

抽選のみOnDrawItemイベントです。そのイベント内でリストを管理することは想定されておらず、必要に応じて現在のアイテムを描画するだけです。

リスト全体を一度に割り当てるのではなく、最初にファイルをチェックしてから、残りのリストを ListBox に割り当てる必要があります。

I := 0;
while I < myItems.Count do
begin
  try
    FileOpenandP(myItems[I]);
    Inc(I);
  except
    myItems.Delete(I);
  end;
end;
ListBox_Browser.Items := myItems;

変更したくない場合はmyItems、代わりに別のリストを使用してください。

tmpItems := TStringList.Create;
try
  tmpItems.Assign(myItems);
  I := 0;
  while I < tmpItems.Count do
  begin
    try
      FileOpenandP(tmpItems[I]);
      Inc(I);
    except
      tmpItems.Delete(I);
    end;
  end;
  ListBox_Browser.Items := tmpItems;
finally
  tmpItems.Free;
end;

または:

ListBox_Browser.Items := myItems;
I := 0;
while I < ListBox_Browser.Items.Count do
begin
  try
    FileOpenandP(ListBox_Browser.Items[I]);
    Inc(I);
  except
    ListBox_Browser.Items.Delete(I);
  end;
end;

または:

ListBox_Browser.Items.BeginUpdate;
try
  ListBox_Browser.Items.Clear;
  I := 0;
  for I := 0 to myItems.Count-1 do
  begin
    try
      FileOpenandP(myItems[I]);
    except
      Continue;
    end;
    ListBox_Browser.Items.Add(myItems[I]);
  end;
finally
  ListBox_Browser.Items.EndUpdate;
end;
于 2012-10-19T22:39:01.040 に答える