Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Checklistbox [D7, WinXP]


Ibn El Ivan ©   (2004-07-26 14:32:00) 

Подскажите пожалуйста для удаления из Checklistbox используется цикл:
for i:=0 to checklistbox.count-1 do
if checklistbox.checked[i] then checklistbox.items.delete(i);
При запуске проги и при попытке удаление нескольких отмеченных элементов появляется сообщение об ошибке: list index out of bounds


ssk   (2004-07-26 14:49:00) [1]

можно и for do, только цикл гнать с конца:

for i:=MAXVALUE downto 0 do
  ....


ssk   (2004-07-26 14:49:00) [2]

можно и for do, только цикл гнать с конца:

for i:=MAXVALUE downto 0 do
  ....


Ibn El Ivan   (2004-07-26 14:39:00) [3]

Спасибо!!


Ega23   (2004-07-26 14:37:00) [4]

Естественно. Потому, что когда ты делаешь
checklistbox.items.delete(i)
твой checklistbox.countстановится меньше на единицу.
Здесь тебе не for цикл нужен, а while


Андрей Л.   (2004-07-26 14:37:00) [5]

При удалениии элемента из списка, весь список перенумеровывается, и от этого элементов ставновится меньше.


Subdigger   (2004-07-26 14:35:00) [6]

при удалении параметр  checklistbox.count становится на 1 меньше

правильно будет так
i:=0;
while i<checklistbox.count do
if checklistbox.checked[i] then checklistbox.items.delete(i)
else inc(i);


@Lex   (2004-07-26 14:35:00) [7]

i:=0;
while i < checklistbox.count do
 if checklistbox.checked[i] then checklistbox.items.delete(i)
 else Inc(i);


Наверх

Титульная страница Поиск, карта сайта Написать письмо