FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Borrar objetos creados dinámicamente
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 PHP:
Código PHP:
|
#2
|
||||
|
||||
El que tengas este problema evidencia que el flujo que tienes actualmente no es correcto. Cuando se empieza con ideas de como "hackear" algo es un "Code Smell".
Además, estas diciendo que tienes una dependencia circular? Deberias mejor ver cómo romperla. Casi siempre las dependencias circulares son un error de diseño (a menos que explícitamente estemos modelando un grafo).
__________________
El malabarista. |
#3
|
||||
|
||||
Gracias por la respuesta, pero tu explicación no me aporta nada.
|
#4
|
||||
|
||||
Hombre, un aporte no siempre viene en forma de código puntual. Lo que Mario te indica, y estoy de acuerdo con él, es que más allá de una posible solución exacta a tu problema, deberías considerar el hecho de que tu diseño es incorrecto. De entrada, un evento como FormCreate no está pensado para ser llamado explícitamente en tu código y además, cualquier cosa que pongas ahí, debería ser exclusivamente usada al crear el formulario y no en momentos posteriores.
Ahora, específicamente, si bien no manejo con soltura C++, me parece que los objetos Lista y RadioGroup1 son variables locales al método así que no tienes forma de acceder a ellos en otros contextos y por tanto no hay cómo borrarlos. Quizá deberías tener variables Lista y RadioGroup declaradas fuera del método, posiblemente como campos privados de la clase del formulario y usar esas variables para construir los objetos y, en su caso borrarlos desde la excepción. Pero, reitero, sería aconsejable que revisaras el diseño de la aplicación. LineComment Saludos |
#5
|
||||
|
||||
Acepto tu sugerencia porque me parece muy correcta y seguramente (lo evaluaré) tenga un error garrafal de concepto; es un manía que tengo bastante habitual el declarar elementos en el OnCreate y, cierto es, que no es lo más lógico.
Mi comentario anterior no es porque no me facilitara código; es simplemente porque poner un enlace a wikipedia o sugerir un hackeo es cualquier cosa menos ayuda. |
#6
|
||||
|
||||
Cita:
Además, no es claro cual es el flujo de la app, así que es difícil deducir que es lo que hay que hacer! Esa es la razón por la que a) No es posible dar una respuesta concreta b) El que tengas que hacer la pregunta, porque el "Code Smell" te esta insinuando que hay un problema, pero precisamente, te impide ver una solución. --- La lógica GUI no es muy diferente a normal. Debería ser maso: Llamando -> ConstructorGUI(parámetros) -> GUI Lo dificil es retornar valores o cuando desde "Llamando" hay que saber que paso con la GUI. La manera mas simple es usando un callback, o armando un delegado. Los eventos deberia ser "reacciones", no usarse en la logica normal (porque los eventos no tienen un orden predecible y terminan armando un flujo espaguetti). Un form es un objeto, asi que puedes agregar tus propios constructores de forma igual.
__________________
El malabarista. Última edición por mamcx fecha: 11-05-2017 a las 21:40:29. |
#7
|
||||
|
||||
Hola.
Cita:
Cita:
A modo de ejemplo, .hpp: Código:
... class TfCalEst : public TForm { __published: ... private: TRadioGroup* FRadioGroup; TListView* FListView; void __fastcall TfCalEst::CreateControl( const int op ); public: ... }; Código:
void __fastcall TForm1::CreateControl( const int op ) { if (op == 3 || op == 4) { delete FListView; FListView = NULL; FListView = new TListView(Panel1); ... } else { delete FRadioGroup; FRadioGroup = NULL; FRadioGroup = new TRadioGroup(Panel1); ... } } void __fastcall TfCalEst::FormCreate(TObject *Sender) { CreateControl ( mOpcMenu->Tag ); } [...] void __fastcall TfCalEst::Button1Click(TObject *Sender) { try { ... } catch(Exception &Exc) { ... CreateControl( mOpcMenu->Tag); } Saludos .)
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Frames creados dinamicamente no se ven | duilioisola | OOP | 2 | 11-03-2011 13:39:12 |
Campos creados dinámicamente clientdataset | sur-se | Varios | 6 | 18-10-2010 09:43:33 |
Cerrar dos formularios creados dinamicamente (al mismo tiempo) | ctronx | Varios | 7 | 02-09-2004 01:19:04 |
cerrar formularios creados dinamicamente | ctronx | Varios | 5 | 17-06-2004 19:25:17 |
Campos creados dinámicamente vs creados estáticamente | Jose_Pérez | Conexión con bases de datos | 2 | 14-04-2004 12:34:03 |
|