Foros Club Delphi

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

DM2005 06-07-2006 08:22:07

listbox con item repetidos
 
Hola, es posible que al visualizar un listbox1, que contiene varios items repetidos, solamente que aparezcan una sola vez.

ej. items

1 - Introducción
1 - Introducción
1 - Introducción
2 - Comienzo
2 - Comienzo
2 - Comienzo
3 - Final
3 - Final
3 - Final

muchas gracias!

kuan-yiu 06-07-2006 09:18:18

¿Y de dónde obtienes los items? ¿Lo rellenas tú? ¿Es una consulta de una base de datos?

nemesio 06-07-2006 14:05:46

Hola

Si los llenas desde una consulta, usa la instrucción GROUP BY del SQL, asi te lo agrupará por Item y no lo tendrás repetido.

Lepe 06-07-2006 16:58:28

Cita:

Empezado por nemesio
Hola

Si los llenas desde una consulta, usa la instrucción GROUP BY del SQL, asi te lo agrupará por Item y no lo tendrás repetido.

Entonces ¿la cláusula SELECT DISTINCT para qué se usa? ;)

seoane 06-07-2006 17:10:07

Si no encuentras una solucion mejor puedes eliminar los elementos repetidos:

Código Delphi [-]
var
  i: integer;
begin
  i:= 0;
  with Listbox1.Items do
    while Count > i do
    begin
      if IndexOf(strings[i])<>i then
        Delete(i)
      else
        inc(i);
    end;
end;

DM2005 06-07-2006 17:27:21

respondiendo la pregunta
 
Hola, los items los obtengo de la carga de un .txt

Código Delphi [-]
ListBox1.Items.LoadFromFile('C:\teste\IPCapitulo.txt');

pero mi idea no es eliminarlos, sino que cuando los visualize no me muestre los repetidos, espero ayude esta explicacion,
gracias,
Saludos

seoane 06-07-2006 17:47:46

Cita:

Empezado por DM2005
... pero mi idea no es eliminarlos, sino que cuando los visualice no me muestre los repetidos ...

No entiendo que es lo que quieres hacer, si no los vas a mostrar para que los necesitas cargados dentro de items. Si los necesitas mas tarde siempre los puedes volver a cargar del txt en un TStringlist, por ejemplo.

La única forma de controlar lo items que se ven y los que no es dibujarlos tu mismo, pero eso es matar moscas a cañonazos. Explica un poco mas lo que quieres hacer y a lo mejor encontramos una solución mejor.

Héctor Randolph 06-07-2006 17:49:15

Sugerencia, usa una lista temporal con la propiedad Duplicates=dupignore para evitar insertar elementos duplicados y después copias los elementos al listbox.

Algo como esto :

Código Delphi [-]


procedure TForm1.Button1Click(Sender: TObject);
var
 Temporal: TStringList;
begin

 Temporal:=TStringList.Create;


 Temporal.Sorted:=True;//La lista debe ser ordenada
 Temporal.Duplicates:=dupIgnore; // Igonorar los elementos repetidos

 Temporal.LoadFromFile('Lista.txt');

 //Copiar desde Temporal hacia ListBox
 ListBox1.Items.AddStrings(Temporal);

 Temporal.Free;


end;

Saludos

nemesio 06-07-2006 21:03:58

Cita:

Originalmente escrito por Lepe
Entonces ¿la cláusula SELECT DISTINCT para qué se usa?
Claro que también sirve. La idea es dar una solución a la vez y que cada miembro del foro aporte con algo.

DM2005 07-07-2006 16:18:02

Gracias a todos, la procedure que Hector envio para mi, funciono correctamente como yo necesitaba....desde ya muchas gracias a todos.


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

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