PDA

Ver la Versión Completa : duda tonta con bucle For


danielmj
30-11-2014, 11:52:36
Hola,

Estoy haciendo un generador de claves por eso de tener mil cuentas repartidas por internet y a veces no recordar algunas de ellas, en fin la duda es una tonteria (supongo), pero me trae frito, la cuestion es que el for no hace lo que quiero y no sé donde está el fallo, o dicho de otro modo, no sé como hacer para salir del bucle.

El código
procedure TForm1.findClick(Sender: TObject);
var
i: integer;

begin
for i:= 0 to clvs.Items.Count -1 do
if (clvs.Items.Item[i].SubItems.Strings[2] = edit3.Text) and
(length(clvs.Items.Item[i].SubItems.Strings[1]) > 32) then
begin
ShowMessage('La contraseña es demasiado larga para mostrarla aquí,'+#13#10+
'pero se le mostrará temporalmente en el campo texto'+#13#10+
'"Buscar contraseña".');
edit3.Text:= clvs.Items.Item[i].SubItems.Strings[1];
end
else
begin
ShowMessage('La contraseña es: '+ clvs.Items.Item[i].SubItems.Strings[1]);
break;
end;
end;

Lo que intento con esas lineas es que busque la contraseña según el contenido de un edit, por ejemplo si en el edit pongo "google1" me debería devolver la contraseña de este "google1" Pero lo que hace es mostrarme una a una todas las contraseñas al ir recorriendo el listview. El uso del break es para forzarle a salir del bucle pero en ese caso solo me muestra el primer elemento del listview o lo que es lo mismo, el elemento del listview que le da valor 0 a la i sea o no igual al criterio de busqueda del edit.
¿Cómo hago para que el for acabe una vez encuentre el contenido del edit (en este caso edit3)?

Un saludo.

Casimiro Notevi
30-11-2014, 14:14:22
Creo recordar que exit.

danielmj
30-11-2014, 14:28:06
Creo recordar que exit.
Tono irónico detectado... :) voy a mirar el exit. Gracias casimiro.

Casimiro Notevi
30-11-2014, 14:46:54
Tono irónico detectado... :) voy a mirar el exit. Gracias casimiro.
No, es que hace años que no uso delphi

danielmj
30-11-2014, 15:47:12
Solución... cambiar el orden de los if
procedure TForm1.findClick(Sender: TObject);
var
i: integer;

begin
for i:= 0 to clvs.Items.Count -1 do
begin
if (clvs.Items.Item[i].SubItems.Strings[2] = edit3.Text) and
(length(clvs.Items.Item[i].SubItems.Strings[1]) > 32) then
begin
ShowMessage('La contraseña es demasiado larga para mostrarla aquí,'+#13#10+
'se le mostrará temporalmente en el campo texto'+#13#10+
'"Buscar contraseña".');
edit3.Text:= clvs.Items.Item[i].SubItems.Strings[1];
end;

if (clvs.Items.Item[i].SubItems.Strings[2] = edit3.Text) and
(length(clvs.Items.Item[i].SubItems.Strings[1]) < 32) then
begin
ShowMessage('La contraseña es: '+ clvs.Items.Item[i].SubItems.Strings[1]);
break;
end;
end;
end;

saludo.