Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cerrar dos formularios creados dinamicamente (al mismo tiempo) (https://www.clubdelphi.com/foros/showthread.php?t=13814)

ctronx 31-08-2004 19:36:14

Cerrar dos formularios creados dinamicamente (al mismo tiempo)
 
Saludos, mi problema es el siguiente: Tengo dos formularios creados dinamicamente de la siguiente forma, en el form1 el cual fue creado de la mima forma tengo el siguiente codigo para crear y visualizar al form2:

Código Delphi [-]
frmForm2 := TfrmForm2.Create(Self);
                     with frmForm2 do begin
                     showModal;
                     end;

Ya en el form2 tengo un boton el cual quiero que cierre los dos formularios, este form2 y el form1 que creo al form2, aqui tengo este codigo:

Código Delphi [-]
close; //para que cierre el form2 que es el activo
frmForm1.Close; //para que cierre el form1 que esta atras y el cual creo al form1

En el evento close de los dos forms tengo el siguiente codigo:
Código Delphi [-]
ACTION:=caFree;
    frmform1:=nil; // y en el evento close del form 2   frmform2:=nil;

Cuando presiono el boton del form2 para cerrar ambos formularios me marca un error de acceso a direccion de memoria o algo parecido.

Cuando en el codigo de creacion de formulario quito el showModal y pongo un simple Show, funciona sin problemas.

Si alguien me puede ayudar de antemano se los adradezco.

yusnerqui 31-08-2004 20:03:06

Código Delphi [-]
frmForm2 := TfrmForm2.Create(Self);
                     with frmForm2 do begin
                     showModal;
                     end;
close
o si lo prefieres
Código Delphi [-]
frmForm2 := TfrmForm2.Create(Self);
                     with frmForm2 do begin
                     showModal;
                     end;
if quierocerrar then
 close;

Espero te ayude.

saludos

ctronx 31-08-2004 22:55:04

Le agrege la instruccion close al boton del form1 donde esta el codigo para crear el form2 pero cierra el form1 sin mostrar el form2.

Y yo lo que quiero es lo siguiente: tengo a un form1 con un boton que crea a un form2 y este form2 tiene un "boton que debe cerrar ambos formularios".



Gracias.

__cadetill 31-08-2004 23:06:44

Si usas ShowModal es imposible que cierre el Form1 sin abrir el Form2 :confused: :confused:

Cómo lo estás haciendo? Porque lo del amigo yusnerqui es totalmente correcto :confused:

ctronx 01-09-2004 00:29:02

primero creo el form1 NO modal luego ahi creo el form2 de tipo Modal y estando en el form2 quiero cerrar el form2 (Modal) y el form1 que no es modal.

jachguate 01-09-2004 06:29:48

Si form1 llama a form2 de forma modal, no podes desde este cerrar a form1...

Sin embargo, podes hacer que se cierre form2 y en form1 evaluar una condición para cerrarlo.

En form2, por ejemplo, al pulsar el botón:

Código Delphi [-]
Procedure TForm2.Button1Click(Sender : TObject);

Begin
  ModalResult := mrYes; //por ejemplo, obliga a que se cierre form2
end;

En form1, creas form2, y cerras form1 asi:

Código Delphi [-]
Procedure TForm1.Button1Click(Sender : TObject);

Begin
  Form2 := TForm2.Create(Self);
  if Form2.ShowModal = mrYes Then
    Close;
end;

Dejando siempre los eventos OnClose como están.

Hasta luego.

;)

__cadetill 01-09-2004 09:28:41

Cita:

Empezado por jachguate
Si form1 llama a form2 de forma modal, no podes desde este cerrar a form1...

Pero es que la solución propuesta por Yusnerqui no cierra Form1 desde Form2

Cita:

Empezado por jachguate
Código Delphi [-]
Procedure TForm1.Button1Click(Sender : TObject);
Begin
  Form2 := TForm2.Create(Self);
  if Form2.ShowModal = mrYes Then
    Close;
end;

No hace falta hacer la evaluación esta si SIEMPRE se ha de cerrar Form1 al cerrar Form2, puedes hacer un close directo (como ya proponia Yusnerqui)
Código Delphi [-]
Procedure TForm1.Button1Click(Sender : TObject);
Begin
  Form2 := TForm2.Create(Self);
  Form2.ShowModal;
  Close;
end;
Al ser Modal, no llegará nunca a la linea del Close hasta que Form2 no se haya cerrado

ctronx 02-09-2004 00:19:04

Gracias, por fin se pudo, estaba sencillo pero habia interpretado mal sus explicaciones, la explicación de Cadetill la entendi mejor y funciono sin problemas.


La franja horaria es GMT +2. Ahora son las 04:15:57.

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