Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-09-2003
Avatar de Flores
Flores Flores is offline
Miembro
 
Registrado: may 2003
Ubicación: Rota (cadiz) ESPAÑA
Posts: 26
Poder: 0
Flores Va por buen camino
Question Recorrido de un Tlistview

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.
Responder Con Cita
  #2  
Antiguo 17-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
bueno, creo que te respondes tu mismo. En lugar de un bucle for, utiliza un bucle while

Código:
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;
Responder Con Cita
  #3  
Antiguo 17-09-2003
Avatar de Flores
Flores Flores is offline
Miembro
 
Registrado: may 2003
Ubicación: Rota (cadiz) ESPAÑA
Posts: 26
Poder: 0
Flores Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 17-09-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
Posteado originalmente por Flores
Echo de menos el smilies aquel que salía con la cara colorada.
jejeje, sigue saliendo, mira

Lo único que cambia algo el formato
Responder Con Cita
  #5  
Antiguo 17-09-2003
Julià T. Julià T. is offline
Miembro
 
Registrado: may 2003
Ubicación: en el teclado
Posts: 314
Poder: 22
Julià T. Va por buen camino
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;
Responder Con Cita
  #6  
Antiguo 18-09-2003
Avatar de Flores
Flores Flores is offline
Miembro
 
Registrado: may 2003
Ubicación: Rota (cadiz) ESPAÑA
Posts: 26
Poder: 0
Flores Va por buen camino
Gracias Julà T.
Otra solución sencilla y elegante.
No os podéis imaginar la de cosas que intenté con el dichoso bucle For....

__________________

Francisco J. Flores
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:30:35.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi