Ajuta la eliminarea liniilor goale din listbox A
Ajuta la eliminarea liniilor goale din ListBox un
Spune-mi, cum poate o buclă pentru a elimina din ListBox „și toate canalele de scurgere goale au încercat astfel:
pentru i: = 0 până la Listbox1.Items.Count do
dacă Listbox2.Items [i] = "" atunci
Listbox1.Items.Delete (i);
Dar pop cu încăpățânare o listă de eroare în afara limitelor (92), în timp ce am doar 72 de elemente în listbokse.
Harden ca un statut de combatant.
pentru i: = Listbox1.Items.Count - 1 downto 0 do
pentru i: = Listbox1.Items.Count -1downto 0 do
Sentimentul am este că nu primesc nimic. must
pentru i: = 0 până la Listbox1.Items.Count-1 do
dacă Listbox2.Items [i] = "" atunci
începe
Listbox1.Items.Delete (i);
dec (i); // sau i: = i-1;
se încheie;
În acel moment foarte rezumate, o astfel de structură, chiar compilatorul nu va trece.
Apropo, memya fost mult timp interesat de întrebarea: de ce
pentru i: = Listbox1.Items.Count-1 downto 0 face.
mai curând
pentru i: = 0 până la Listbox1.Items.Count-1 face.
Eu iau întotdeauna un al doilea și davolen.
Deoarece Listbox1.Items.Count-1 vyschislyaetsya o dată, și dacă în ciclul pentru a elimina elementul ați înțeles ce se întâmplă ;-)
M-am gândit că de fiecare dată când se calculează :(. Și este adevărat. Vă mulțumim pentru iluminarea ta :)
în orice ListBox1.Items.Count - 1 odată considerate
Forma de realizare de mai sus a ciclurilor pentru i: = 0 până la ListBox1.Items.Count - 1 fac;
este mai preferabil (i byte tip aici)
// pentru i: = 0 până la ListBox1.Items.Count - 1 do;
// inc byte ptr [i]
// dec Al
// jnz - $ 0A
// pentru i: = ListBox1.Items.Count - 1 downto 0 do;
// dec byte ptr [ebx]
// cmp byte PTR [EBX], $ ff
// jnz - $ 07
În scopul de a controla executarea buclei, expresiile initialValue și finalValue sunt evaluate doar o singură dată. înainte de a începe bucla.