Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Controlar si un form ha sido creado antes (https://www.clubdelphi.com/foros/showthread.php?t=73155)

vivamotos 04-04-2011 17:50:01

Controlar si un form ha sido creado antes
 
Buenos días,

Estoy creando una aplicación que cuando presiona un botón crea el formulario con la instrucción
Application->CreateForm...

Lo que no se, es antes de crear el form consultar si ya ha sido creado para no volver a repetir la acción cada ves, como lo puedo hacer?

Grácias.

escafandra 04-04-2011 18:55:06

Singleton, 2, 3.

Saludos.

_cero_ 04-04-2011 21:51:09

Muy interesante lo del patrón Singleton, aunque ya lo implementaba de alguna forma nunca supe que tenía un nombre. En cuanto al problema no sería más fácil un simple if? me explico:
Código:

    if (!Application->FindComponent("Form2")) {
        Application->CreateForm(__classid(TForm2), &Form2);
        Form2->Show();
    }
    else {
        MessageBoxA(Handle, "Ya se creo", "", MB_ICONINFORMATION);
    }

FindComponent devuelve un TComponent* si ya existe Form2 y NULL si no hay ninguna instancia de Form2, ten en cuenta que tienes que liberar la memoria cuando cierres Form2 de lo contrario solo quedara oculto, y esto se hace con el siguiente código en el OnClose:
Código:

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)
{
/**/
    Action=caFree;
}

Nos vemos

escafandra 04-04-2011 22:46:55

Si bien en muchos casos una solución como la expuesta por _cero_ o la consistente en una simple bandera, puede ser válida en muchos casos, carece de la verdadera ventaja del uno de un patrón singleton.

Usando singleton se asegura que nunca se llega a instanciar mas de un objeto de la clase. No me refiero a desechar la segunda instancia sino a que no llegue a existir.



Saludos.


La franja horaria es GMT +2. Ahora son las 07:36:59.

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