Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problema con listbox (https://www.clubdelphi.com/foros/showthread.php?t=81764)

ale4132 15-12-2012 21:07:01

problema con listbox
 
Tengo un Problema en delphi 7 con un listbox, la situacion es la siguiente:
Por medio de un boton genero de manera aleatoria una cierta cantidad de items en un listbox, algunos de los cuales a veces se repiten mas de una vez, mi pregunta es:
¿como podría hacer por medio de otro boton para que los elementos o items duplicados del listbox se eliminen?

espero respuesta, muchas gracias!!

ecfisa 15-12-2012 21:54:43

Hola ale4132, bienvenido a Club Delphi. :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Con respecto a tu consulta podes hacer:
Código Delphi [-]
procedure BorrarRepetidos(LB: TListBox);
begin
 with TStringList.Create do
  try
    Sorted       := True;
    Duplicates   := dupIgnore;
    Text         := LB.Items.Text;
    LB.Items.Text:= Text;
  finally
    Free;
  end;
end;

Ejemplo de llamada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
   BorrarRepetidos(ListBox1)
end;

Saludos.

ale4132 15-12-2012 22:01:48

listo!!!
me fue de mucha ayuda la respuesta.
gracias, saludos!!!

ale4132 15-12-2012 22:14:00

si no es mucha molestia quisiera saber si es posible realizar el mismo procedimiento de eleminimar duplicados por medio de un boton utilizando una estructura de trabajo "for .... do" en la programacion

nlsgarcia 16-12-2012 00:38:13

ale4132,

Cita:

Empezado por ale4132
si no es mucha molestia quisiera saber si es posible realizar el mismo procedimiento de eleminimar duplicados por medio de un boton utilizando una estructura de trabajo "for .... do" en la programacion

Revisa este código:
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
   i,j : Integer;
   Item : String;
   Count : Integer;

begin

   Count := ListBox1.Count-1;

   for i := 0 to Count do
   begin
      If (i > Count) Then break;
      Item := ListBox1.Items.Strings[i];
      for j := i + 1 to Count do
      begin
         If (j > Count) Then break;
         if (ListBox1.Items.Strings[j] = Item)  then
         begin
            ListBox1.Items.Delete(j);
            Dec(Count);
         end
      end;
   end;

end;
El código anterior elimina los Items Duplicados en un control TListBox por medio de comparaciones sucesivas.

Espero sea útil :)

Nelson.

ecfisa 16-12-2012 01:09:43

Hola.

Usando for podrías hacer:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j: Integer;
begin
  with ListBox1 do
    for i:= 0 to Items.Count-1 do
      for j:= Items.Count-1 downto i+1 do
        if Items[i] = ListBox1.Items[j] then
          Items.Delete(j);
end;

Saludos.:)

nlsgarcia 16-12-2012 03:27:12

ale4132,

Revisa este código:
Código Delphi [-]
procedure TForm1.Button5Click(Sender: TObject);
var
   i : integer;
begin
   with ListBox1 do
   for i := Items.Count - 1 downto 0 do
   begin
      if Items.IndexOf(Items[i]) < i then
      Items.Delete(i);
   end;
end;
El código anterior plantea otra método para la eliminación de Items Duplicados en un control TListBox.

Espero sea útil :)

Nelson.

nlsgarcia 16-12-2012 04:18:49

ale4132,

Cita:

Empezado por nlsgarcia
El código anterior elimina los Items Duplicados en un control TListBox por medio de comparaciones sucesivas.

Corrección: El código del primer método propuesto falla si un item se repite más de una vez, lo correcto sería:
Código Delphi [-]
procedure TForm1.Button3Click(Sender: TObject);
var
   i,j : Integer;

begin

   for i := 0 to ListBox1.Count-1 do
      for j := ListBox1.Count-1 downto i+1 do
         if (ListBox1.Items.Strings[i] = ListBox1.Items.Strings[j]) then
            ListBox1.Items.Delete(j);

end;
Espero sea útil :)

Nelson.

ale4132 16-12-2012 19:52:28

gracias, me fueron muy utiles las prespuestas!!!
saludos!!!


La franja horaria es GMT +2. Ahora son las 04:55:55.

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