Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
ВнизГде моя ошибка? Найти похожие ветки
← →
Ross (2002-04-27 19:22) [0]Помогите. Не могу разобраться:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
i:integer;
begin
i:=0;
try
if MessageDlg("Confirm!",
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
for i:=0 to RxCheckListBox1.Items.Count-1 do
begin
if RxCheckListBox1.Checked[i]=true then
RxCheckListBox1.Items.Delete(i);
end;
end
else
except
...
end;
end;
Вылетает ошибка:
---------------------------
Debugger Exception Notification
---------------------------
Project Dere.exe raised exception class EStringListError with message "List index out of bounds (3)". Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------
← →
Шурко (2002-04-27 19:32) [1]Твоя ошибка в цикле
for i:=0 to RxCheckListBox1.Items.Count-1 do
:)))
перебор I например от 0 до 9 , а если 5 елемент удалить ????
надо писать:
for i:=RxCheckListBox1.Items.Count-1 downto 0 do
или :
I:=0;
while I<RxCheckListBox1.Items.Count do
if ... then RxCheckListBox1.Items.delete(I)
else inc(I);
Удачи и поменьше таких ляпов :)))).
← →
Ally (2002-04-27 19:33) [2]Возможно все дело в том, что в теле цикла у Вас удаляются итемы, изначальное число которых было задано при входе посредством
> RxCheckListBox1.Items.Count-1, которое, разумеется, изменяется при удалении, но кол-во заданных циклов остается прежним и i нарастает в соответствии с ним - здесь возникает ситуация, когда вы пытаетесь удалить, скажем, i-й итем, а у вас их уже i-2 из-за Delet"а в теле цикла.
Надеюсь, что не очень путано объяснил ситуацию :)
Удачи.
← →
Ross (2002-04-27 19:41) [3]Точно. Спасибо Шурко и Ally. Не подумал. Но теперь буду знать точно.
Еще раз спасибо.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.13;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.005 c