Du fängst an, da ist i gleich null, also wird der nullte Eintrag gelöscht. Jetzt hat die Lisbox zwar einen Eintrag weniger, aber es ist alles eins runter gerutscht und es gibt wieder einen Eintrag mit dem Index null. Beim nächsten Durchlauf ist i gleich eins und der Eintrag mit dem Index eins wird gelöscht. Aber was ist mit dem Eintrag, der den Index 0 hat? Der bleibt stehen und wird nicht gelöscht. Klar?
Im Gegensatz zu deinem Code, löscht mein Code immer den letzten Eintrag weg, also von hinten. Listbox mit 10 Einträgen: i ist beim Start 10 oder 9, jenachdem wie viele stehen bleiben sollen. Dann wird der letzte Eintrag weggelöscht, i wird dekrementiert und hat jetzt der Wert, der der verbleibenden Anzahl von Einträgen in der Listbox entspricht.
Mach mal eine Listbox mit den Einträgen 0 bis 9 und dann probier mal deinen Code aus und dann meinen.