| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Duckman007 Ens


Registrado: 12 May 2007Mensajes: 45Ubicación: Oaxaca, Mexico
|
Publicado: Jue 25 Jun, 2009 3:04 am Asunto: Eliminar una serie de Objetos creado en tiempo de ejecución |
|
|
Hola buen día a toda la comunidad. Mi problema es que no puedo eliminar (delete) una serie de objetos de tipo Label que he creado en tiempo de ejecución. Explico
Utilizo en mi aplicación 2 buttons y 1 ScrollBox1
Declaro mis variables en el .h de mi forma en public
int j; //se refiere a la propiedad Top del Label
AnsiString num_objetos; //guardada un numero al azar entre 1 - 10
AnsiString k; //concatenara el valor que tenga k con el nombre del Label que se este generando en tiempo de ejecución
TLabel *Label; //Objeto de tipo Label
Coloco dos Button en mi forma. El primero es para crear mis objetos en tiempo de ejecución de tipo Label. El número de objetos a crear depende del random el cual lo coloco en la variable “num_objetos” y posteriormente los empiezo a mostrar dentro de un ScrollBox1. Como se muestra a continuación:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
randomize();
num_objetos = random (10);
for(int i=0; i "menor" num_objetos; i++)
{
Label = new TLabel(this);
Label->Parent = ScrollBox1;
Label->Name = "Nombre_variable"+k;
Label->Caption = Label->Name;
Label->Top = j;
j = j + 25;
k = k + 1;
}
}
Hasta ahí todo bien, el problema viene cuando quiero eliminar esa seria de objetos que me creo, lo cual es cuando ocupo el segundo Button
void __fastcall TForm1::Button2Click(TObject *Sender)
{
k = 0;
for(int i=0; i "menor" num_objetos; i++)
{
delete Label; //aquí me elimina el ultimo objeto creado
Label->Name = "Nombre_variable"+k; //aquí el error. Trato de hacer referencia al primer objeto creado y eliminarlo
k = k + 1;
}
}
NOTA: en el for hay una palabra de dice "menor" la sustituyen por el simbolo < ya que me sacaba cosas raras.
Les agradeceria y me pudieran apoyar en esto. Gracias. |
|
| Volver arriba |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Jue 25 Jun, 2009 7:14 am Asunto: |
|
|
Dos cosas.
Primera:
Deshabilita HTML en los mensajes, así el texto del código no se corrompe al publicarlo en el foro. La opción la tienes en tu perfil o debajo de la ventana de edición de mensajes.
Segunda:
Si haces delete Label, no puedes usar más ese Label, no existe. Utiliza FindComponent para encontrar un puntero a tu label.
Mira este ejemplo:
| Código: | TLabel *L = (TLabel*)FindComponent("Nombre_variable" + IntToStr(k));
if(L) delete L; |
Saludos. |
|
| Volver arriba |
|
 |
Duckman007 Ens


Registrado: 12 May 2007Mensajes: 45Ubicación: Oaxaca, Mexico
|
Publicado: Jue 25 Jun, 2009 6:36 pm Asunto: |
|
|
| Gracias "escafandra" me la salio a la perfección. |
|
| Volver arriba |
|
 |
|