Страница 1 из 1
Проблема с циклом repeat
Добавлено: 11 мар 2005, 10:20
Dr.Grizzly
Всем привет, вот есть пища для размышления, меня уже заклинило. Есть такой вот цыкл
Код: Выделить всё
repeat
ls:=ls+1;
until (CheckListBox1.Items.Count=ls) or (CheckListBox1.Checked[ls]=true);
Мне надо чтоб цыкл завершил считать по одному из этих условий, в зависимости что первое произойдет. Смотрю, по отдельности каждое условие срабатывает, а вместе не хотят, компилятор продолжает крутить цыкл. Что делать?
Добавлено: 11 мар 2005, 10:46
Игорь Акопян
количество элементов в коллекции Count-1... Не угадал?

Добавлено: 11 мар 2005, 11:13
Dr.Grizzly
Я тоже так подумал

но не угадал

фишка та в том что по отдельности условия работают, т.е. без "or" а вместе сволочи не хотят

теоритически должно, а на практике-облом
Добавлено: 11 мар 2005, 13:27
Игорь Акопян
не понял: кладу на форму чеклистбокс и кнопку, создаю три пункта, добавляю обработчик:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
ls: integer;
begin
ls := -1;
repeat
ls:=ls+1;
until (CheckListBox1.Items.Count=ls) or (CheckListBox1.Checked[ls]=true);
end;
всё работает... после выхода из цикла LS равна номеру первого помеченного элемента
Добавлено: 12 мар 2005, 21:09
YurikGL
repeat
ls:=ls+1;
until (CheckListBox1.Items.Count=ls) or (CheckListBox1.Checked[ls]=true);
пробуем переделать
f1,f2:boolean
repeat
ls:=ls+1;
f1:=CheckListBox1.Items.Count=ls;
f2:=CheckListBox1.Checked[ls];
until (f1) or (f2);
смотрим в watch значения f1,f2 и (f1 or f2)
Делаем выводы.
Добавлено: 14 мар 2005, 09:01
Dr.Grizzly
не понял: кладу на форму чеклистбокс и кнопку, создаю три пункта, добавляю обработчик:

Самое интересное, я тоже попробовал создать отдельную прогу с одним обработчиком

дак тоже зарабтало,а вот в самой проге не хочет... :? предложение от Mr.YurikGL мне понравилось

получилось именно как он предложил

спасибо!