Показать сообщение отдельно
  #8  
Старый 16.04.2013, 17:45
xbron xbron вне форума
Прохожий
 
Регистрация: 15.04.2013
Сообщения: 5
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Все довольно просто. В конструкции for задаются границы определяющие значение счетчика на каждой цикле. В вашем случае:
Код:
for i:=1 to listbox1.Items.Count-1 do
(Кстати, с границами вы тоже наврали. Элементы в listbox1 начинаются с 0, а не с 1.)
Так вот, for вычисялет значение для правой границы только один раз, при входе в цикл. Т.е. если у вас при входе в цикл было 10 элементов в listbox1.Items.Count, то 10 раз он и будет выполнятся, независимо от того что вы будете делать внутри цикла с listbox1. И если в результате удаления элементов из listbox1 у вас их станет меньше 10, то вы получите ошибку выхода за границы. Но! Если цикл работает в обратную сторону, т.е:
Код:
for i:=listbox1.Items.Count-1 downto 0 do
то тут уже ничего страшного не произойдети если вы удалите текущий элемент, ведь на следующем проходе он будет двигаться к началу, и никакой ошибки выхода за границы быть уже не может.

Надеюсь теперь понятно.
Теперь да, но задача-то не решена )) Всё равно не проверяет на повторения ((
И кое-что ,
Код:
 f:=listbox1.Items.IndexOf(listbox1.Items.strings[i]);
F принимает значения от 0 до 2, но никак не -1, если существует повторение , что не так?
Ответить с цитированием