Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-08-2004
ctronx ctronx is offline
Miembro
 
Registrado: jun 2004
Posts: 214
Poder: 14
ctronx Va por buen camino
Unhappy 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.
Responder Con Cita
  #2  
Antiguo 31-08-2004
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 654
Poder: 14
yusnerqui Va por buen camino
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
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #3  
Antiguo 31-08-2004
ctronx ctronx is offline
Miembro
 
Registrado: jun 2004
Posts: 214
Poder: 14
ctronx Va por buen camino
Question

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.
Responder Con Cita
  #4  
Antiguo 01-09-2004
cadetill cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 18
cadetill Va por buen camino
Si usas ShowModal es imposible que cierre el Form1 sin abrir el Form2

Cómo lo estás haciendo? Porque lo del amigo yusnerqui es totalmente correcto
Responder Con Cita
  #5  
Antiguo 01-09-2004
ctronx ctronx is offline
Miembro
 
Registrado: jun 2004
Posts: 214
Poder: 14
ctronx Va por buen camino
Unhappy

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.
Responder Con Cita
  #6  
Antiguo 01-09-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.243
Poder: 21
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #7  
Antiguo 01-09-2004
cadetill cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 18
cadetill Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 02-09-2004
ctronx ctronx is offline
Miembro
 
Registrado: jun 2004
Posts: 214
Poder: 14
ctronx Va por buen camino
Thumbs up

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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 13:56:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi