Delphi - Llamada Recursiva a mismo Form

 
Vista:

Llamada Recursiva a mismo Form

Publicado por joselito (177 intervenciones) el 03/06/2005 20:33:07
Hola, amigos.

Tengo un pequeño problema, a ver si me podéis echar una mano en esto.

Dentro de un Form (llamaré Formulario1), tengo un botón (botón1). Este botón, hace una serie de operaciones, y llama al mismo formulario de nuevo, a su constructor, pasándole unos parámetros y creándolo de nuevo (ambos formularios se crean y se llaman en tiempo de ejecución), pero pasándole diferentes parámetros para mostrar datos diferentes dependiendo del dato recibido, de tal forma que estarían en pantalla el Formulario1 (el que ha llamado) y el Formulario2 (el que se crea de nuevo en tiempo de ejecución al pulsar el boton, aunque es el mismo que el Formulario1, la misma clase).
Sería como llamadas recursivas al mismo formulario.

Mi pregunta es la siguiente:

Tratándose del mismo Form (es la misma Unit, la misma clase), ¿cómo podría cerrar el formulario1 cuando se muestre el formulario2 y viceversa, cuando muestre el 2 poder cerrar el 1 para no ir acumulando ventanas?.
Ambos formularios son modales, y no puedo hacer un "Free" del formulario, porque entiendo que se destruirían los dos al tratarse de la misma clase.

¿Alguien me podría echar una mano?. Me urge.

Saludos.
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Llamada Recursiva a mismo Form

Publicado por beosman (163 intervenciones) el 07/06/2005 10:50:49
Pues al ser la misma clase no se destruirían los dos, por supuesto que no. Hay que distinguir en clases y objetos. Los objetos son instancias de la clase. Por tanto, para que se muestren los dos form tienes que tener dos variables (como mínimo, si quieres que se muestren más pues más variables). Diagemos, más o menos así:

class TForm1 = class(TForm)
...
end;

var form1,form2: TForm1;

form1 := TForm1.Create(...);

Cuando se presione el botón de cerrar del form1:

form1.Close();
form2 := TForm1.Create(...);
form2.ShowModal();

Y en el evento onShow del form2 puedes destruir el form1.

Esta es una solución, pero otra solución sería crear sólo un form y ponerle una función que actualizara los datos que quieres, ya que dices que son los mismos datos con distintos parámetros, así te evitas andar jugando con la creación y destrucción de forms (jugar con la memoria consume muchos recursos).

var form: TForm1;

form := TForm1.Create(...);

form.ShowModal();

En el botón que quieres mostrar el otro:

form.UpdateData(...); // con sus correspondientes parámetros

Ni creas ni destruyes ni muestras, sólo actualizas los datos.

Espero que esto te sirva de algo. Un saludo.

Diego :: beosman
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Llamada Recursiva a mismo Form

Publicado por Diego Romero (636 intervenciones) el 07/06/2005 17:29:11
Un momento.
Dices que ambas instancias del Formulario 1 son modales?
Entonces no necesitas instanciar de nuevo el Formulario 1, lo que necesitas es modificar la información mostrada dentro de la misma instancia (la única).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

YA ME VALE....

Publicado por joselito (177 intervenciones) el 13/06/2005 09:40:34
YA ME VALE...
Hace falta ser torpe... Pues con eso claro que funcionaría.... Desde luego...
Muchas gracias a los dos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar