Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-04-2011
vivamotos vivamotos is offline
Miembro
 
Registrado: ago 2006
Posts: 150
Poder: 18
vivamotos Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 04-04-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Singleton, 2, 3.

Saludos.

Última edición por escafandra fecha: 04-04-2011 a las 19:06:51.
Responder Con Cita
  #3  
Antiguo 04-04-2011
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_cero_ Va por buen camino
Thumbs up

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
Responder Con Cita
  #4  
Antiguo 04-04-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Problema al asignar valor antes de visualizar el form drykea Varios 20 19-01-2009 17:38:37
Como ejecutar un evento antes de mostrar un form hperez Varios 5 18-05-2007 07:12:25
Codigo antes de mostrar form - Maximizar lafirma Varios 20 03-08-2006 23:46:30
Como saber si un Formulario ha sido creado Durbed OOP 7 13-10-2005 13:06:28
¿Cómo saber si un Form está creado? nesetru Varios 5 09-02-2004 12:59:37


La franja horaria es GMT +2. Ahora son las 15:29:36.


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
Copyright 1996-2007 Club Delphi