Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Convertir de ListBox a distintas cadenas de texto (https://www.clubdelphi.com/foros/showthread.php?t=62129)

j_flores3000 04-12-2008 22:12:39

Convertir de ListBox a distintas cadenas de texto
 
Queria saber si se puede pasar cada uno de los items de un list box a distintas variables string, ejemplo tengo en el list box:
1.- club
2.- delphi
3.-foros
4.- oop
y que estos items se asignen a distintas var string.

dec 04-12-2008 22:19:22

Hola,

Puedes acceder a los "Items" de un "ListBox" mediante la propiedad del mismo nombre:

Código Delphi [-]
var
  s: string;
begin
  
  s := ListBox1.Items[0];

end;

En este caso la variable "s" contendrá el texto del primer elemento de la lista.

Caro 04-12-2008 22:23:39

Hola, solo necesitas acceder a la posición que necesitas en su propiedad Items, un ejemplo para ver el item seleccionado.

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
showmessage(ComboBox1.Items[ComboBox1.ItemIndex]);
end;

Saluditos

j_flores3000 04-12-2008 22:47:23

Cita:

Empezado por Caro (Mensaje 329725)
Hola, solo necesitas acceder a la posición que necesitas en su propiedad Items, un ejemplo para ver el item seleccionado.

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
showmessage(ComboBox1.Items[ComboBox1.ItemIndex]);
end;

Saluditos

Lo que quiero hacer es acceder automaticamente no uno por uno porque la cantidad de los items no es fija

Caro 04-12-2008 22:52:39

Cita:

Empezado por j_flores3000 (Mensaje 329733)
Lo que quiero hacer es acceder automaticamente no uno por uno porque la cantidad de los items no es fija

Hola de nuevo, puedes acceder a todos los items recorriendo, ejemplo:

Código Delphi [-]
var
 cadena : String;
begin
 for Ind:=0 to ComboBox1.Items.Count-1 do
  begin
   cadena := ComboBox1.Items[Ind];
   showmessage(cadena); 
  end;

Saluditos

dec 04-12-2008 22:53:57

Hola,

Puedes valerte de otras propiedades de "Items" para recorrer los existentes:

Código Delphi [-]
var
  s: string;
  i, len: integer;

begin

  len := ListBox1.Items.Count - 1;

  for i := 0 to len do
  begin

    s := s + ' - ' + ListBox1.Items[i];

  end;

  // Muestra los elementos separados por guiones

  ShowMessage(s);

end;

j_flores3000 04-12-2008 22:56:54

Cita:

Empezado por dec (Mensaje 329735)
Hola,

Puedes valerte de otras propiedades de "Items" para recorrer los existentes:

Código Delphi [-]
var
  s: string;
  i, len: integer;

begin

  len := ListBox1.Items.Count - 1;

  for i := 0 to len do
  begin

    s := s + ' - ' + ListBox1.Items[i];

  end;

  // Muestra los elementos separados por guiones

  ShowMessage(s);

end;

Sin ser molesto lo que hacen ahi es agregar todos los items a 1 sola cadena de texto yo necesito que se haga cada palabra (o item) en una variable distinta

Caro 04-12-2008 23:04:27

Cita:

Empezado por j_flores3000 (Mensaje 329737)
Sin ser molesto lo que hacen ahi es agregar todos los items a 1 sola cadena de texto yo necesito que se haga cada palabra (o item) en una variable distinta

No entiendo porque lo quieres poner en diferentes variables, si puedes trabajar con la lista de items directamente.

En diferentes variables:

Código Delphi [-]
var
 cadena : String;
 var1, var2, var3, var4, var5....... : String;
begin
 for Ind:=0 to ComboBox1.Items.Count-1 do
  begin
    cadena := ComboBox1.Items[Ind];
    Case Ind Of
     0 : var1 := cadena;
     1 : var2 := cadena;
     2 : var3 := cadena;
     3 : var4 := cadena;
     4 : var5 := cadena;
     ..................... 
    end; 
  end;

Saluditos

ContraVeneno 04-12-2008 23:05:19

¿y para que los quieres en una variable? digo, ya los tienes en el combo... para que repetir el valor en otra variable... además, los ejemplos que amablemente Caro y Dec te han mostrado, son suficientes como para que TU deduzcas como realizar lo que quieres... no es buena idea esperar a que aquí hagan tu tarea.

dec 04-12-2008 23:06:05

Hola,

Hum... pero es que no vamos a hacerte todo el trabajo, ¿o sí? Je je je. Lo que quiero decir es que en el código que tanto Caro como yo hemos mostrado, puede verse cómo asignar un elemento de una lista a una variable de tipo "string". ¿Que quieres usar más variables de tipo string y asignar un elemento de la lista a cada una? Bueno. ¿Quién te lo impide? Otra cosa es que claro, no sabes los elementos que va a tener la lista... luego no puedes declarar variables "s1, s2, s3" y así. Vale.

Pues entonces se me ocurre que puedes usar un "Array de cadenas", y añadir cada elemento de la lista en un elemento del "Array", pero, aquí ya se me viene a la cabeza que no sé muy bien qué quieres hacer, porque, ¿para qué añadir los elementos de la lista en un "Array", si ya están en la lista, que nos ofrece una propiedad como "Items", que, es como si fuera un "Array"? Así que no se me ocurre qué más decirte y lo lamento. :rolleyes:

egostar 04-12-2008 23:07:36

Cita:

Empezado por j_flores3000 (Mensaje 329737)
Sin ser molesto lo que hacen ahi es agregar todos los items a 1 sola cadena de texto yo necesito que se haga cada palabra (o item) en una variable distinta

No se pero creo que para eso se tendrían que crear frames en tiempo de ejecución, porque hasta donde se (aunque alguien podria decirme lo contrario) no se pueden crear variables en tiempo de ejecución.

Salud OS

Caro 04-12-2008 23:12:39

Cita:

Empezado por dec (Mensaje 329744)
Pues entonces se me ocurre que puedes usar un "Array de cadenas", y añadir cada elemento de la lista en un elemento del "Array", pero, aquí ya se me viene a la cabeza que no sé muy bien qué quieres hacer, porque, ¿para qué añadir los elementos de la lista en un "Array", si ya están en la lista, que nos ofrece una propiedad como "Items", que, es como si fuera un "Array"? Así que no se me ocurre qué más decirte y lo lamento. :rolleyes:

Eso mismo digo yo, sería mejor trabajar con la lista de items directamente.

Cita:

Empezado por egostar (Mensaje 329745)
No se pero creo que para eso se tendrían que crear frames en tiempo de ejecución, porque hasta donde se (aunque alguien podria decirme lo contrario) no se pueden crear variables en tiempo de ejecución.

Frames :confused:, no sería mucha cosa para volver a guardar los items. Que yo sepa no se pueden crear variables en ejecución, pero podría tenerlas definidas todas las que piense que va utilizar y asignar con un case como lo hice arriba, pero insisto sería mejor que trabajara con los items directamente y así no se complica la vida.

Saluditos

egostar 04-12-2008 23:30:03

Cita:

Empezado por Caro (Mensaje 329747)
Frames :confused:, no sería mucha cosa para volver a guardar los items. Que yo sepa no se pueden crear variables en ejecución, pero podría tenerlas definidas todas las que piense que va utilizar y asignar con un case como lo hice arriba, pero insisto sería mejor que trabajara con los items directamente y así no se complica la vida.

Puede ser, el asunto es donde quiere poner los nombres de los datos que tenga en el ListBox, pero supongamos que quiera poner labels en la forma pero que se creen solo las que tenga el listbox. Yo crearia un frame con un label y haria esto.

Aqui algo rapido :)

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  I: integer;
  f: TFrame2;
begin
  for I := 0 to ListBox1.Count - 1 do begin
    f := TFrame2.Create(nil);
    f.Parent := Form1;
    f.Label1.Caption := ListBox1.Items[i];
    f.Top := 100+i*15;
    f.Left := 20;
  end;
end;

Salud OS

Caro 04-12-2008 23:35:23

Cita:

Empezado por egostar (Mensaje 329752)
Puede ser, el asunto es donde quiere poner los nombres de los datos que tenga en el ListBox, pero supongamos que quiera poner labels en la forma pero que se creen solo las que tenga el listbox. Yo crearia un frame con un label y haria esto.

Ok amiguito ;), en el ejemplo que das también se podría crear los Label directamente sin usar los frames. Creo que sería bueno que el amiguito/a nos indicara para que realmente quiere utilizar las diferentes variables.

Saluditos

egostar 04-12-2008 23:38:28

Cita:

Empezado por Caro (Mensaje 329756)
Ok amiguito ;), en el ejemplo que das también se podría crear los Label directamente sin usar los frames. Creo que sería bueno que el amiguito/a nos indicara para que realmente quiere utilizar las diferentes variables.

Saluditos

:D :D :D, bueno amiguita, es que me gusta complicarme la vida ;):rolleyes:

Salud ITOS

PD, me enseñas a hacer eso :) :o

Delphius 04-12-2008 23:47:18

Sería útil que j_flores3000 aportara más detalles del caso. Si nos describiera sus problemas, necesidades, requisitos, planteos y/o dudas podríamos ver tal vez a esto con otra óptica y tal vez ofrecer alguna alternativa.

Por lo pronto, me uno a sus planteos:
¿Para que tener tantas variables como items existan si se puede tener y referenciar a cada item, desde una misma variable (combo)?

j_flores3000, a lo que apuntan todos los compañeros (y compañera;)) es que se estaría redundando datos. Si ya en el Combo se tiene guardado los datos ¿Para que tener otras N variables con cada dato? El combo no es más que un array dinámico visual. Y como cualquier array permite que todos los items se referencien mediante un único nombre. ¡Esa es una de sus cualidades y ventajas!

Como he dicho al principio, si conocieramos más del tema...

Saludos,

egostar 04-12-2008 23:49:00

El punto es que para que quiere otro array si al final un ListBox es eso :rolleyes: es necesario mas información.

Salud OS

PD; Como bien lo estas diciendo amigo Delphius ;)

Caro 04-12-2008 23:55:32

Cita:

Empezado por egostar (Mensaje 329757)
PD, me enseñas a hacer eso :) :o

Supongo que a crear los Labels sin los Frames.

Digamos que los ponemos dentro de un panel, por eso lo del Parent.

Código Delphi [-]
var
 aTop, Ind : Integer;
 Lab : TLabel;
begin
 aTop := 10;
 for Ind:=0 to ComboBox1.Items.Count-1 do
  begin
   Lab := TLabel.Create(Self);
   Lab.Parent := panel1;
   Lab.Name := 'Label'+IntToStr(Ind);
   Lab.Caption := ComboBox1.Items[Ind];
   Lab.Top := aTop;
   Lab.Left := 20;
   Inc(aTop,15);
  end;
end;


Yo también estoy con ustedes,sería bueno que nos de mas información.

Saluditos

j_flores3000 04-12-2008 23:56:56

Muchas gracias por todo lo comentado hasta ahora. Es que tengo que insertar en un quick report todos los items que haya en el listbox pero que sean en qrtext distintos. Por eso queria pasarlos a variables de texto y de ahi asignarlos a los qrtext ( En un quick report). Lo que me doy cuenta ahora es que puedo asignarlos desde los items.

Los items estan en un formulario y el quick report en otro. Es para hacer facturas y necesito poner los productos que compre en lineas total mente distintas se ve?

Bien el problema restante es que los items los voy agregando yo y a veces son 50 items o aveces 2 se ve??

Igualmente gracias por todo...

egostar 04-12-2008 23:58:45

Hola amiguita

Esto es lo que no tenia en mente :o

Código Delphi [-]
Lab.Name := 'Label'+IntToStr(Ind);

Como hacer que el label tuviera otro nombre :rolleyes::D

gracias amiguita ;)

Salud ITOS


La franja horaria es GMT +2. Ahora son las 09:52:41.

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