Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Borrar objetos creados dinámicamente

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Borrar objetos creados dinámicamente Responder citando

En el OnCreate de un formulario, dependiendo del valor de una variable, creo de forma dinámica un TListView o un TRadioGroup así:
Código:
void __fastcall TfCalEst::FormCreate(TObject *Sender)
{
     if (mOpcMenu->Tag == 3 || mOpcMenu->Tag == 4)
     {
          Panel->Width = 300;

          TListView *Lista = new TListView(Panel);
          [...]
     }
     else
     {
          TRadioGroup *RadioGroup1 = new TRadioGroup(Panel);
          [...]
     }
}

Esto, evidentemente, se ejecuta sin mayor problema. En un evento OnClick de un botón pido al usuario un dato para hacer unos cálculos; por ejemplo:
Código:
void __fastcall TfCalEst::Button1Click(TObject *Sender)
{
     try
     {
          switch (mOpcMenu->Tag)
          {
               case '1':
               case '2':
                    if (!InputQuery(Application->Title, "Indique el número de años a considerar para la estadística.", cAux))
                              throw Exception("");
                    if (StrToIntDef(cAux, 0) < 1 || StrToIntDef(cAux, 0) > 5)
                         throw Exception("El valor introducido (" + cAux + ") es incorrecto.");
                    break;
               case '3':
                    [...]
                    break;
               case '4':
                    [...]
                    break;
          }
     }
     catch(Exception &Exc)
     {
          if (!Exc.Message.IsEmpty())
               Mensaje(1, Exc.Message, "Volver");
          FormCreate(NULL);
          return;
     }
}

Dado que si se produce una excepción se vuelve al OnCreate me interesaría en ese catch pudiera hacer un delete de los objetos que haya creado al lanzarse el módulo pero no se me ocurre como hacerlo.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Hola, Angel. Declare el componente como global que puede borrarlo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Lo sé, y sé que es la solución más fácil. Pero el problema al compilar siempre me avisa que no existe el objeto y me preocupa que una de estas se me olvide por qué me da ese error, le de el OK a borrar las declaraciones y luego la líe. Sad
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Una opción es como te dice Felip, y otra es que le des un nombre único a los componentes que creas dinámicamente:
Código:
TListView *Lista = new TListView(Panel);
Lista->Name = "miListView";

Y luego para destruirlos los buscas por el nombre, en este caso en "Panel" que es su propietario:
Código:
delete Panel->FindComponent("miListView");
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

_Leo escribió:
Una opción es como te dice Felip, y otra es que le des un nombre único a los componentes que creas dinámicamente:
Código:
TListView *Lista = new TListView(Panel);
Lista->Name = "miListView";

Y luego para destruirlos los buscas por el nombre, en este caso en "Panel" que es su propietario:
Código:
delete Panel->FindComponent("miListView");

¿Ves? El nombre único está pero ese código no se me había ocurrido. Voy a probarlo ahora mismo.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.