Как исправить ошибку listerror list index out of bounds?

На форме есть компонент sListBox1 (разновидность ListBox1 в Alpha Controls).
Туда добавляются элементы
sListBox1.Items.Add('..........');

В коде мне нужно перебрать все элементы этого sListBox1 . Работа идет в потоке.
procedure TMyThread.Execute;
var
i:integer;
begin
for i:=0 to form1.sListBox1.Items.Count-1 do
begin
full_filename_path:=form1.sListBox1.Items[i];
filename_name:=ExtractFileName(form1.sListBox1.Items[i]);
//.....
end;
end;
end;


При добавлении более одного файла, возникает ошибка
Ошибка listerror list index out of bounds (1).

Как исправить ошибку listerror list index out of bounds?
  • Вопрос задан
  • 4883 просмотра
Пригласить эксперта
Ответы на вопрос 2
tsklab
@tsklab
Здесь отвечаю на вопросы.
Границы счётчика FOR вычисляется один раз перед циклом. Если в основном потоке меняется form1.sListBox1, то может не оказаться нужного Items[i]. Или проверяйте его наличие. Или используйте цикл WHILE, в котором сравнение счётчика с условием будет проверяться каждый раз.
Замечание: оптимизатор может изменить направление FOR.

Совет: не связывайте модули.
То есть у TMyThread должен быть свой TStrings, в который нужно передать form1.sListBox1.Items.
Ответ написан
@kalapanga
А если в TMyThread.Execute с использованием Synchronize получить содержимое листбокса и дальше работать с этим содержимым?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы