Помощ премахнете празни редове от падащ списък а

Помощ премахнете празни редове от ListBox на

Кажи ми, как може за линия, за да премахнете от ListBox "и всички празни оттича се опитали по този начин:
защото: = 0 до Listbox1.Items.Count направи
ако Listbox2.Items [I] = "", тогава
Listbox1.Items.Delete (I);
Но упорито се появи Списък грешка извън границите (92), а аз имам само 72 елементи в listbokse.

Хардън като строеви устав.
защото: = Listbox1.Items.Count - 1 Downto 0 направи

защото: = Listbox1.Items.Count -1downto 0 задачи

Чувство, което имам е, че не се получи нищо. трябва

защото: = 0 до Listbox1.Items.Count-1 направи
ако Listbox2.Items [I] = "", тогава
започвам
Listbox1.Items.Delete (I);
декември (I); // или I: = I-1;
приключи;

Точно в този обобщен такава структура, дори и компилаторът няма да мине.

Между другото, memya отдавна се интересуват от въпроса: защо
защото: = Listbox1.Items.Count-1 Downto 0 направи.
по-скоро
защото: = 0 до Listbox1.Items.Count-1 направи.
Винаги приемайте втора и davolen.

Защото Listbox1.Items.Count-1 vyschislyaetsya веднъж, а ако в цикъла за премахване на обекта, който да разбере какво се случва ;-)

Помислих си, че всеки път, когато се изчислява :(. И това е вярно. Благодарим Ви за просветление :)


във всеки ListBox1.Items.Count - 1, след като разглежда
В горното изпълнение на циклите за I: = 0 до ListBox1.Items.Count - 1 направят;
повече се предпочита (I байт тип тук)

// за I: = 0 до ListBox1.Items.Count - 1 направи;
// включени байт PTR [Ь]
// декември др
// jnz - $ 0A

// за I: = ListBox1.Items.Count - 1 Downto 0 направи;
// декември байт PTR [EBX]
// CMP байт PTR [EBX] $ ее
// jnz - $ 07

За целите на контрол на изпълнението на цикъла, изразите InitialValue и finalValue се оценяват само по веднъж. преди началото на цикъла.