PDA

Ver la Versión Completa : Recorrido de un Tlistview


Flores
17-09-2003, 15:05:20
Hola a todos.
Tengo un problema con un Tlistview. He de rrecorrerlo y borrar de la lista los Items que tienen marcado la casilla de verificación. El problema que al hacerlo siempre me da un error. Creo que es porque lo recorro con un bucle for tal como el siguiente:

procedure borramsgs;
var
i: integer;
begin

for i:=0 to Form1.list2.Items.Count-1 do
begin
if Form1.list2.Items[i].Checked then Form1.list2.Items[i].Delete;
end;

end;


Cuando llega al Item 5 (por ejemplo) y lo borro, creo que ya el campo count del Tlistview.Items cambia y me transtoca el bucle for. Al menos esto es lo que creo.
¿Estoy equivocado?
¿El error me lo merezco por mal programador?
¿Saldré alguna vez de este "bucle infinito de desesperanza"?
¿Alguien me sacará de la oscuridad para llevarme de nuevo a la luz?

Gracias por adelantado.

__cadetill
17-09-2003, 15:35:43
bueno, creo que te respondes tu mismo. En lugar de un bucle for, utiliza un bucle while


procedure borramsgs;
var
i: integer;
begin
i := 0;
while i <= Form1.list2.Items.Count-1 do
begin
if Form1.list2.Items[i].Checked then Form1.list2.Items[i].Delete;
end;
end;

Flores
17-09-2003, 16:40:15
Echo de menos el smilies aquel que salía con la cara colorada.
Es que cuando uno se encabezona con algo...

Muchas gracias cadetill por tu pronta respuesta, era SIMPLEMENTE es.

__cadetill
17-09-2003, 18:14:54
Posteado originalmente por Flores
Echo de menos el smilies aquel que salía con la cara colorada.

jejeje, sigue saliendo, mira :o

Lo único que cambia algo el formato :cool:

Julià T.
17-09-2003, 19:40:59
Lo lógico de un bucle es recorrerlo de menor a mayor, pero cuando tenermos que recorrer una lista en la que se van a borrar (parcial o totalmente) lo que se debe hacer es recorrer me mayor a menor.

procedure borramsgs;
var
i: integer;
begin
for i:=Form1.list2.Items.Count-1 downto 0 do
if Form1.list2.Items[i].Checked then
Form1.list2.Items[i].Delete;
end;

Flores
18-09-2003, 01:52:57
Gracias Julà T.
Otra solución sencilla y elegante.
No os podéis imaginar la de cosas que intenté con el dichoso bucle For.... :o

__________________

Francisco J. Flores