PDA

Ver la Versión Completa : pasar datos de un form a otro form


vroa74
12-10-2007, 16:49:57
Hola estoy usando BDS 2006.
he leido los hilos relacionados con este tema más no ha funcionado.

Quiere pasar un valor o arios valores de un form a otro form.

los forms esta ligados(esta declarados mutuamente para poder se utilizados)


en form1 tengo declarada variables las cuales son llamadas y modificadas en el form2

al regresar al form 1 las variables no fueron modificadas y el valor que me interesa consevar del form 2 se pierde.

que puedo hacer ????????
deseo conserver el valor.

asi abro el form2:

var f : tForm2;
begin
f:= Tform2.Create(application);
f.Image1.Picture.LoadFromFile(form1.logo);
try
f.ShowModal;
finally
f.Free;
Label7.Caption :=IntToStr(id_dir); // asigno la variable que se cambio en el form2 a una etiqueta para saber si el valor se pierde.

eduarcol
12-10-2007, 16:55:36
y donde tienes declarado la variable Id_Dir en form2 o form1??

vroa74
12-10-2007, 17:01:47
La variable Id_Dir esta declarada en Form1
como publica para que sea accesible para form2.

eduarcol
12-10-2007, 17:07:33
porq no muestras el codigo donde la asignas??

JoseAntonio
12-10-2007, 17:10:38
La verdad no se entiende muy bien tu codigo, pero al parecer el f del tipo tform2 es una variable del tipo tform2 pero no es la misma Form2 de tu proyecto, quizas a eso se deba que tu codigo no funciona.

vroa74
12-10-2007, 17:22:07
En el form1

private
{ Private declarations }
public
id_tit : integer;
id_dir : integer;
id_com : integer;
id_tra : integer;
{ Public declarations }
end;

var
Form1: TForm1;


Mando a llamar al form2


procedure TForm2.JvBitBtn4Click(Sender: TObject);
var f : tForm2;
begin
f:= Tform2.Create(application);
f.Image1.Picture.LoadFromFile(form1.logo);
try
f.ShowModal;
finally
f.Free;
Label7.Caption :=IntToStr(id_dir); // cuando regresa del form refreca el valor de la variable
end;// fin del try
end;


Estabdo en el form2 esto es lo que sucede caundo oprimo el boton para asignarle el valor a la variable declarada en el form1.

procedure TForm2.JvBitBtn1Click(Sender: TObject);
begin
form1.id_dir := strtoint(Edit1.Text);
end;

gluglu
12-10-2007, 17:42:19
A mi me funciona perfectamente el ejemplo que has puesto en BDS2006.

Creo que deberías aclarar varios puntos.

Mando a llamar al form2

procedure TForm2.JvBitBtn4Click(Sender: TObject);
var f : tForm2;
begin
f:= Tform2.Create(application);
f.Image1.Picture.LoadFromFile(form1.logo);
try
f.ShowModal;
finally
f.Free;
Label7.Caption :=IntToStr(id_dir); // cuando regresa del form refreca el valor de la variable
end;// fin del try
end;


No sé si te has equivocado al copiar y pegar tu código aquí en este hilo. Entiendo que ese procedimiento debe encontrarse y estar declarado en el Form1.

try
f.ShowModal;
finally
f.Free;
Label7.Caption :=IntToStr(id_dir);

Label7.Caption no se va a actualizar con el valor de Id_dir que has modificado en el Form2 HASTA que se cierre el Form2. Así lo has decidido en tu código.

Cuando se cierra Form2, el caption de Label7 cambia correctamente al valor dado a id_dir en el Form2.

Lo dicho, por lo demás, a mi me funciona perfectamente.

Dime si no es así, y si necesitas aclarar algun tema adicional. ;)

vroa74
12-10-2007, 18:20:24
Lo que has descrito es justo lo que necesito
lamentablemente a mi no me funciona
aun desconosco porque

Caral
12-10-2007, 18:21:44
Hola
Aqui tienes un ejemplo muy sencillo para pasar datos de un from a otro y viceversa.
Saludos

gluglu
12-10-2007, 18:23:08
Revisa tu código.

Si lo deseas, pon aquí el código completo del Form1 y del Form2, si no es demasiado grande.

Te recomiendo por otro lado que intentes abrir un nuevo proyecto con las funciones básicas, y verás como debería funcionar. Algo debes de tener en tu código mal para que no te funcione tal y como explicas.

gluglu
12-10-2007, 18:35:09
Este es el ejemplo que tu mismo has puesto, simplificado al máximo.

Verás como funciona ....

Cuando cierras Form2, el Label1 en el Form1 cambia de valor, después de haber pulsa el Button1 en el Form2.

;)

vroa74
12-10-2007, 18:36:01
mucha gracias por el ejemplo lo revise rapidamente
si pasa los valores mas sin embargo me di ceunta de un detalle
los valores que pasate solo son dato ente componentes.

El problema que tengo son en variables creadas por el usuario y al pasarlas de un form al otro las pierdo.

Quizas podria tener mas de un componente oculto dentro de mi form, mas eso no se me hace practico que cada vez que desee para un valor de una variable tenga que crear un componente no visible.

voy a hacer una ejemplo a ver si puede representar mi duda.

voy a editar este msg en 10 min.

gluglu
12-10-2007, 18:45:48
Supongo que después de escribir tu último mensaje viste el código que adjunté justo antes, que corresponde a tu propio código. Ya me dirás ....

vroa74
12-10-2007, 18:55:30
gracias a todos.
la resolucion del problema en mi caso muy en particular es :

form1 levanta variable id_dir
form2 lee form1.id_dir
regreso a form1 uso id_dir no tiene valor mas sin embargo si llama a form1.id_dir de devuelve el valor que conserva del form2.

otra forma en la cuel me funciono es igualar los valores.
cuando regreso al form1 hago
id_dir := form1.id_dir;
y de esta forma el valor se unifica.

pro que esta pasando. ????
no tengo la menor idea.

eduarcol
12-10-2007, 19:08:06
no tendras declarada dos veces esa variable id_dir, es lo unicoque se me ocurre por lo que dices

vroa74
12-10-2007, 19:11:52
He revisado el codigo 3 veces y sili usi id_dir en el form1 en todos los demas solo hago referencia de el invocandolo form1.id_dir. Por ese motivo declare la variable publica.