Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   cerrar form desde otro (https://www.clubdelphi.com/foros/showthread.php?t=42547)

anubis 17-04-2007 11:18:07

cerrar form desde otro
 
Yo sigo preguntando.
Tengo un form que llama a otro pero cuando le doy a cancelar devuelve un valor para que cierre el form padre, le pongo close y no cierra, le pongo form.close y tampoco cierra aunque la orden si la ejecuta.

gracias

dec 17-04-2007 11:24:26

Hola,

¿Estás mostrando el formulario "modalmente"? Cuando muestras un formulario de este modo puedes recabar su "resultado" con una serie de constantes predefinidas:

Código Delphi [-]
with TForm2.Create(nil) do
try
  if (ShowModal() = mrOk) then
  begin
    // mrOK
  end;
finally
  Free;
end;

En todo caso no veo yo porqué en principio no puedes hacer algo así:

Código Delphi [-]
with TForm2.Create(nil) do
try
  if (ShowModal() <> mrOk) then
  begin
    Form1.Close();
  end;
finally
  Free;
end;

anubis 17-04-2007 21:04:46

Si la verdad es que es un llamada a form modal.
Llamo al form2 desde el form1 porque se abre automaticamente, si en el form2 se da a cancelar, se tiene que cerrar automaticamente el form1, pero si le pongo form1.cancel, no hace nada, y si le pongo ademas form1.free, me lo cierra pero el programa se me queda congelado.

dec 17-04-2007 21:08:57

Hola,

Tal como yo lo veo puedes hacer lo que he dicho más arriba. Ten en cuenta que no tienes que codificar nada, es decir, que al mostrar un formulario "modalmente" este ya retorna de por sí un resultado: "mrCancel", "mrOk", etc.

De ahí que puedas mostrar el formulario 2 desde el formulario 1, y, si se cierra el formulario 2 con "algo" distinto a "mrOk"... nada te impide cerrar el formulario 1. Es lo mismo de antes:

Código Delphi [-]
// Creo una instancia del formulario 2
with TForm2.Create(nil) do
try
  // Muestro el formulario modalmente y compruebo si el resultado
  if (ShowModal() <> mrOk) then
  begin
    // Si el resultado es distinto de "mrOk"... cierro el formulario 1
    Form1.Close();
  end;
finally
  Free;
end;

anubis 17-04-2007 21:57:07

pues sigue sin funcionar, como no sea que lo tengo metido en un form.activate, .....

de todas formas nose porque no me funciona poner close, y con free se me bloquea, lo unico que me funciona es hide, pero estoy viendo que en todos los forms que estoy usando si pongo free despues del close, porque ahi el close si me funciona, añadiendo el free me sale una ventana de dialogo que pone esto:
"Projetc programa.exe raise exception class EAbstractError with message 'Abstract Error'. Process stopped. Use step or run to continue, pero eso en tiempo de ejecucion.

rcarrillom 18-04-2007 05:08:46

Saludos al foro.
Si el form2 lo madas llamar en el evento OnActivate del form1, es un ciclo sin fin, la primera vez que creas form1 y se hace la ventana activa, disparas su evento OnActivate porque le pasas el foco; al momento de regresar de la llamada modal de form2, le pasas de nuevo el foco a form1, disparando de nuevo su evento OnActivate y llama de nuevo a form2. Te recomiendo mover el código del OnActivate al OnShow o al OnCreate.

anubis 18-04-2007 06:11:57

se agradece la respuesta. Tambien he probado poner el free dentro de un boton onclick para cerrarlo, pero da fallo al final porque dice area de violacion de memoria.

en fin pasa algo sino uso el free?


La franja horaria es GMT +2. Ahora son las 15:33:46.

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