![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы
![]() |
Поиск в этой теме
![]() |
![]() |
#1 |
Сисадмин
Форумчанин
Регистрация: 28.12.2007
Сообщений: 320
|
![]()
Пытаюсь удалить все выделенные элементы из TCheckListBox
Код:
Посмотрите, пожалуйста, че не так. |
![]() |
![]() |
![]() |
#2 |
Участник клуба Подтвердите свой е-майл
Регистрация: 14.12.2007
Сообщений: 1,434
|
![]()
ГЫ, индексация у этого компонента идет с 1, т.е.
Код:
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
![]() |
![]() |
![]() |
![]() |
#3 | |
Сисадмин
Форумчанин
Регистрация: 28.12.2007
Сообщений: 320
|
![]() Цитата:
http://program.rin.ru/razdel/html/1146.html |
|
![]() |
![]() |
![]() |
#4 |
Участник клуба Подтвердите свой е-майл
Регистрация: 14.12.2007
Сообщений: 1,434
|
![]()
Извените, что то не то в попыхах наплел.
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
![]() |
![]() |
![]() |
![]() |
#5 |
Сисадмин
Форумчанин
Регистрация: 28.12.2007
Сообщений: 320
|
![]()
И при сохранении в файл выдает эту же ошибку
![]() Код:
|
![]() |
![]() |
![]() |
#6 |
Пользователь
Регистрация: 20.01.2008
Сообщений: 24
|
![]()
Да бросьте вы, что за проблемы. Посмотрите повнимательнее до куда у вас цикл-то идет (List.Count-1):
Исходный список: (0-checked) (1-nonchecked) (2-nonchecked) (3-checked) (4-nonchecked) А теперь как работает ваш алгоритм: Итерация 1: i=0 -> пропуск Итерация 2: i=1 -> удаление, результат: (0-checked) (1-nonchecked) (2-checked) (3-nonchecked) Итерация 3: i=2 -> пропуск Итерация 4: i=3 -> удаление, результат: (0-checked) (1-nonchecked) (2-checked) Итерация 5: i=4 -> Acseption Error: List index out of bounds(4) потому что массив имеет длину уже не 5, а 3!!! |
![]() |
![]() |
![]() |
#7 | |
Сисадмин
Форумчанин
Регистрация: 28.12.2007
Сообщений: 320
|
![]() Цитата:
![]() И че то я не понял, что Вы хотели сказать. Я бросил TLabel на форму и выставил Label1.caption:=inttostr(CheckListB ox1.items.count) и при удалении в заголовок метки ставится то число, сколько элементов в списке. |
|
![]() |
![]() |
![]() |
#8 |
Сисадмин
Форумчанин
Регистрация: 28.12.2007
Сообщений: 320
|
![]()
Записал вот так:
with checklistbox1 do for i:=items.Count-1 downto 0 do if state[i]=cbChecked then Items.Delete(i); и все заработало, только я никак не могу понять почему когда было так: with checklistbox1 do for i:=0 to items.Count-1 do if state[i]=cbChecked then Items.Delete(i); не работало??????????? |
![]() |
![]() |
![]() |
#9 |
*
Старожил
Регистрация: 22.11.2006
Сообщений: 9,201
|
![]()
Проблема решается очень просто.
Не нужно никаких псевдонаучных изысканий и флуда. Что бы вы ни удаляли, удаляйте с помощью обратного цикла, то есть в вашем случае: Код:
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 20.01.2008
Сообщений: 24
|
![]()
Вы меня совсем не поняли!!!
Когда речь идет о списке, из которого нужно удалить записи, то цикл for to неприемлем, так как такая конструкция в паскале предполагает константы (for const1 to const2 begin end ![]() Странно, что Вас мой пример в сообщении не убедил...посмотрите повнимательнее. Приведу пример еще раз, уже обоих случаев: Пусть нужно удалить только те элементы массива, в которых стоит '+' Случай 1 (for 0 to Count-1): i 0 1 2 3 4 0 + - + + + 1 - + + + 2 - + + 3 - + (error) 4 - Случай 2 (for Count-1 downto 0): i 0 1 2 3 4 4 + - + + + 3 + - + + 2 + - + 1 + - 0 + - ошибок нет и быть не может, так как нет обращений к элементам, отсутствующим в списке (при удалении сдвиг происходит влево, пожтому читать нужно справа налево, чтобы ваш счетчик сдвигался в ту же сторону) |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
TCheckListBox | Snoopy | Компоненты Delphi | 2 | 22.08.2008 10:38 |
TCheckListBox | andrey4623 | Общие вопросы Delphi | 6 | 29.12.2007 19:44 |
TCheckListBox Вопрос | Рома | Компоненты Delphi | 12 | 06.09.2007 16:38 |
TCheckListBox - не работает | mrandrey | Компоненты Delphi | 0 | 30.03.2007 11:17 |