Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Encontrar un Item en un ListBox (https://www.clubdelphi.com/foros/showthread.php?t=31150)

esocrates 28-04-2006 23:30:26

Encontrar un Item en un ListBox
 
Un saludo a todos,
Necesito ayuda con este código:
Tengo en un Form un ListBox, un Botton y un Edit.
Quiero recorrer el ListBox y si se encuentra determinado Item que se escriba un mensaje en el Edit.
Supongamos que el Item es 'Pepe' y se encuentra en el ListBox
Intento esto y no pasa nada:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i:= 0 to Listbox1.Items.Count - 1 do
    if Listbox1.ItemIndex <> -1 then
      begin
  if ListBox1.Items.Text='Pepe' then

      begin
        Edit1.Text:= 'Encontrado';
      end;
    end;
end;
end;

Desde ya muchas gracias

ContraVeneno 28-04-2006 23:55:12

Código Delphi [-]
if ListBox1.Items[i].Text='Pepe' then

no creo que
Código Delphi [-]
if Listbox1.ItemIndex <> -1 then
sea necesario... ya que lo estas filtrando desde el ciclo for; si no tiene elementos no se ejecuta el ciclo.

esocrates 29-04-2006 00:06:41

Muchas gracias ContraVeneno;
Lo resolví de este modo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  for i:= 0 to Listbox1.Items.Count - 1 do

      begin

       if  ListBox1.Items[i] ='Pepe' then

          begin
            Edit1.Text:= 'Encontrado';
          end;
       end;
end;

Un saludo

roman 29-04-2006 00:17:40

¿Y no sería más sencillo usar IndexOf?

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if ListBox1.Items.IndexOf('Pepe') <> -1 then
  begin
    Edt1.Text := 'Encontrado';
  end;
end;

// Saludos

Sotrono 29-04-2006 00:21:25

Hola, no necesitas poner esos begins despues del if, ya que solo son necesarios cuando debajo del if hay mas de una instrucción. Además en este caso es mejor utilizar un repeat o en todo caso un while en lugar de un bucle for, porque este último te va a recorrer todo el ListBox siempre, y si la cadena la encuentra, por ejemplo, en la segunda linea no necesita seguir recorriendolo.

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
  i := 0;
  repeat
    if ListBox1.Items.Strings[i] = 'Pepe' then
      Edit1.text := 'Encontrado';
      i := i + 1;
  until (i = ListBox1.Items.Count) or (edit1.text = 'Encontrado');
//Sale del repeat cuando encuentra la cadena o llegó al ultimo item
end;

Bytes...

Sotrono 29-04-2006 00:29:03

Cita:

Empezado por roman
¿Y no sería más sencillo usar IndexOf?

Código Delphi [-]

procedure TForm1.Button1Click(Sender: TObject);
begin
  if ListBox1.Items.IndexOf('Pepe') <> -1 then
  begin
    Edt1.Text := 'Encontrado';
  end;
end;


No conocía esa función, igual no creo que compile la linea Edt1.Text := 'Encontrado'; :D :D

roman 29-04-2006 00:29:23

Ojo:

Antes de comenzar el repeat hay que verificar que el list box no esté vacío.

// Saludos

roman 29-04-2006 00:31:07

Cita:

Empezado por Sotrono
no creo que compile la linea Edt1.Text := 'Encontrado'; :D :D

Claro que sí. Yo a mis "edits" los llamo Edt1, Edt2, Edt3, etc. :D :D

// Saludos

esocrates 29-04-2006 00:34:12

Muchas gracias roman y sotrono.
Cada una de las soluciones que me han dado me ha enseñado algo nuevo.
Un saludo


La franja horaria es GMT +2. Ahora son las 22:53:18.

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