PDA

Ver la Versión Completa : Error al convertir Edit a Integer


5TU4RT
19-04-2012, 22:33:31
Buenas... Estoy aprendiendo delphi y pasa que haciendo una condicion me salta un error resaltandome el "Else" pero la verdad no se porque, espero que me puedan ayudar!!!

procedure TForm1.Button1Click(Sender: TObject);
var
a, b, suma : integer;
begin
if Edit1.Text = '' then
ShowMessage('Digite un valor');
else
Label3.caption := ('+');
a := StrToInt(Edit1.Text);
b := StrToInt(Edit2.Text);
suma := a + b;
Edit3.Text := IntToStr(suma);
end;

Delphius
19-04-2012, 22:44:44
cuando se coloca la parte else no se debe cerrar el then con ;. Si colocas ese ; el compilador lo interpreta como el fin del IF. Observa:

BIEN:

if (condición)
then sentencia
else sentencias;

MAL:

if (condicion)
then sentencia;
else sentencia;

Recuerda que cuando son 2 o más sentencias debe añadirse BEGIN-END. Naturalmente, si en el then debes colocar un begin-end a dicho end no se le debe finalizar con ; porque estarás en el mismo error.

Saludos,
PD: A estudiar la sintaxis y semántica de Pascal/Object Pascal

5TU4RT
19-04-2012, 22:50:27
Muchas Gracias man, jajaja y muy efectiva tu respuesta...
me podrias elaborar un ejemplo porfavor de lo del begin-end??


SALU2

5TU4RT
19-04-2012, 23:02:08
Ya arregle lo que me dijiste y me funciona muy bien...
pero ahora lo que pasa es lo siguiente:

procedure TForm1.Button1Click(Sender: TObject);
var
a, b, suma : integer;
begin
if Edit1.Text = '' then
ShowMessage('Porfavor Digite un Valor')
else
Label3.caption := ('+');
a := StrToInt(Edit1.Text);
b := StrToInt(Edit2.Text);
suma := a + b;
Edit3.Text := IntToStr(suma);
end;

Cuando el Edit1 no tiene nada y doy click al boton me sale un mensaje diciendo "porfavor digite un valor" y al darle en ok! al mensaje me aparece otro error!!!
no se porque!!!

Muchisimas Gracias...

Casimiro Notevi
19-04-2012, 23:08:02
Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración.

Y recuerda poner los tags al código fuente, ejemplo:

http://neftali.clubdelphi.com/images/UtilizarTAGs.png


Saludos.

5TU4RT
19-04-2012, 23:17:57
No lo habia leido man! Muchas Gracias =...

SALU2

Caral
19-04-2012, 23:19:45
Hola
No dices el error que sale pero es de imaginar que la propiedad de alguno de los edits esta vacía o contiene texto.
Coloca un cero en la propiedad text de cada edit y esto:

procedure TForm1.Button1Click(Sender: TObject);
var
a, b, suma : integer;
begin
if Edit1.Text = '' then
begin
ShowMessage('Porfavor Digite un Valor');
Edit1.SetFocus;
end
else
a := StrToInt(Edit1.Text);
b := StrToInt(Edit2.Text);
suma := a + b;
Edit3.Text := IntToStr(suma);
end;
Saludos

5TU4RT
19-04-2012, 23:54:41
le modifique: le puse el begin y el end entre el then y el else como me pusiste! tamebien edite la propiedad de texto del Edit... pero me aparece aun este mensaje...
pero por lo que se entiende del mensaje va por ahi el rollo...

( no tengo permsos para poner imagenes )
http://img17.imageshack ---->>> http://us/img17/2558/errorhw.jpg
Gracias, Salu2

ecfisa
19-04-2012, 23:59:32
Hola 5TU4RT.

Otra alternativa es:

procedure TForm1.Button1Click(Sender: TObject);
var
a, b: integer;
begin
if TryStrToInt(Edit1.Text, a) and TryStrToInt(Edit2.Text, b) then
Edit3.Text:= IntToStr(a+b)
else
ShowMessage('Error: sin datos o no se ingresó un número entero')
end;


Saludos.

5TU4RT
20-04-2012, 00:09:49
esa seria una buena alternativa, pero ecfisa, hablando del c0de como yo ya lo tengo que seria lo que pasa??? porque me aparece ese error???

Muchas Gracias

ecfisa
20-04-2012, 00:15:59
Hola.

No puedo habrir el enlace. ¿Podrías copiar/pegar el mensaje de error ? (Ctrl+C para copiarlo y Ctrl+V para pegarlo aquí)

Pero pienso igual que mi amigo Caral, debe ser error de conversión...

Saludos.

5TU4RT
20-04-2012, 00:33:49
me aparece ('' is not a valid integer value)

ecfisa
20-04-2012, 00:49:01
me aparece ('' is not a valid integer value)
Exáctamente.

Como te dijo Caral más arriba el error es provocado por que el valor de un Edit es una cadena vacía.

Por el código que veo debe ser el valor de Edit2, deberías evaluarlo al igual que haces con Edit1:

if (Edit1.Text = '')or(Edit2.Text = '') then
begin
// Mensaje de error
...

Con TryStrToInt evitas esta excepción (además de algunas comprobaciones más que deberás hacer del otro modo)

Saludos.

Edito: Modifiqué el título original del hilo: "Ayuda con este error!!!" por otro más significativo a fín de facilitar las busquedas temáticas.

Pedro-Juan
20-04-2012, 01:11:32
Hola 5TU4RT

Por el código que veo en los edit sólo necesitas números enteros, con esto en el evento OnKeyPress del edit evitas que se introduzcan otros caracteres:

procedure Form.Edit1KeyPress(Sender: TObject; var Key: Char);
var cReturn: Char;
begin
cReturn := Key;
if ((Key < #48) or (Key > #57)) then Key := #0;
if (cReturn = #8) then Key := #8;
end;


Espero te sirva.

Un saludo.