Ver la Versión Completa : Punteros a objetos
chinchan
05-05-2008, 14:03:17
Hola, en un programa c++ Builder, tengo una matriz con 60 objetos TPanel y en ejecución les tengo que dar nombre (Panel1->Caption), pero como es lógico no quiero llamar uno a uno. ¿Cómo se puede hacer de una manera sencilla?. Es decir:
en vez de
Panel1->Caption="1";
Panel2->Caption="2";
Panel3->Caption="3";
etc..
algo así:
for(a=1;a<=60;a++){
Panel[a]->Caption=a;
}
Gracias.
escafandra
05-05-2008, 14:16:43
Pues esa parece la forma más razonable de hacerlo. Fíjate en este código. Las matrices en C comienzan en el elemento "CERO"
for(a=0; a<60; a++){
Panel[a]->Caption = IntToStr(a);
}
Creando, además los TPanel:
TPanel Panel[60];
for(a=0; a<60; a++){
Panel[a] = new TPanel(this);
Panel[a]->Caption = IntToStr(a);
}
Recuerda destruirlos (delete) cuando no los necesites.
Saludos.
chinchan
05-05-2008, 14:54:43
Aquí tengo el problema, que no se crear los TPanel
al escribir el código:
TPanel Panel[60];
me da un error.
escafandra
05-05-2008, 20:34:14
Si, no te lo explique lo suficientemente y asumí que sabias que NO puedes crear directamente una matriz de objetos VCL sino una matriz de punteros a objetos VCL (Un puntero a puntero)
Para crear:
TPanel** Panel = new TPanel*[60];
for(int a=0; a<60; a++){
Panel[a] = new TPanel(this);
Panel[a]->Caption = IntToStr(a);
}
Tienes varias formas de destruir la matriz, la mas intuitiva es esta:
for(int n=0; n<60; n++){
delete Panel[n]; //Destruyes cada objeto
}
delete Panel; // destruyes el puntero a 60 punteros
Saludos.
Aclaración:
Creo los TPanel así new TPanel(this) asumiendo que this es un form (osea un TComponent*) En caso contrario, que this no sea un TComponent* fallará
chinchan
06-05-2008, 14:22:26
Ok, muchas gracias. Me ha valido perfectamente.
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.