Показать сообщение отдельно
  #6  
Старый 16.04.2013, 17:25
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
Сообщение от xbron
Можно как-нибудь по подробнее, всё же тема создана новичком )
Все довольно просто. В конструкции 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
то тут уже ничего страшного не произойдети если вы удалите текущий элемент, ведь на следующем проходе он будет двигаться к началу, и никакой ошибки выхода за границы быть уже не может.

Надеюсь теперь понятно.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием