 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 09 Abr, 2012 4:50 pm Asunto: Borrar elementos de un formulario |
|
|
Por necesidades del programa en un formulario creo y elimino, en tiempo de ejecución y según me hace falta, una serie de TLabel. Las creo así:
| Código: | Label = new TLabel(this);
Label->Alignment = taLeftJustify;
Label->AutoSize = false;
Label->Caption = "Forma de pago";
Label->Font->Style = TFontStyles() << fsBold;
Label->Height = 20;
Label->Left = 94;
Label->Name = "LabelL1";
Label->Parent = Panel9;
Label->Top = Label6->Top + 6;
Label->Transparent = true;
Label->Width = 90; |
Y para borrarlas uso este bucle que llamo cuando me hace falta:
| Código: | TComponent *Source;
for (nItem = 0; nItem < ComponentCount; nItem ++)
{
Source = Components[nItem];
if (Source->Name.SubString(1, 6) == "LabelL")
delete Source;
Application->ProcessMessages();
} |
El problema que me estoy encontrado es que borra un elemento sí y uno no; he comprobado que si creo cuatro etiquetas (LabelL1, LabelL2, etc.) me borra las que tienen índice impar y conserva las pares por lo que cuando vuelvo a pasar por la definición de las mismas me da error porque ya existe un elemento con ese nombre. He probado con y sin el ProcessMessages y da lo mismo. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 10 Abr, 2012 8:34 am Asunto: |
|
|
Prueba del siguiente modo:
| Código: | for (int nItem = ComponentCount - 1; nItem >= 0; nItem--)
{
TComponent* Source = Components[nItem];
if (Source->Name.SubString(1, 6) == "LabelL")
delete Source;
}
|
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
frios Lt

Registrado: 20 Nov 2005Mensajes: 79Ubicación: España
|
Publicado: Mar 10 Abr, 2012 3:25 pm Asunto: Re: Borrar elementos de un formulario |
|
|
Creo que lo que te pasa, es que cada vez que borras un componente estas variando la condición en ComponentCount, ya que hay uno menos que al comenzar el bucle. No estas guardando el número de elementos en una variable, y lo calculas cada vez.
¿puede ser? |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mar 10 Abr, 2012 8:26 pm Asunto: Re: Borrar elementos de un formulario |
|
|
| frios escribió: | Creo que lo que te pasa, es que cada vez que borras un componente estas variando la condición en ComponentCount, ya que hay uno menos que al comenzar el bucle. No estas guardando el número de elementos en una variable, y lo calculas cada vez.
¿puede ser? |
Es una posibilidad en la qeu no había pensado, pero entonces me mantendría los últimos creados (LabelL3 y LabelL4, por ejemplo) y no salteados como lo hace. De todas maneras deben ir por ahí los tiros. _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Mar 10 Abr, 2012 10:19 pm Asunto: Re: Borrar elementos de un formulario |
|
|
| Angel escribió: | | pero entonces me mantendría los últimos creados (LabelL3 y LabelL4, por ejemplo) y no salteados como lo hace. De todas maneras deben ir por ahí los tiros. |
Esto es lo que ocurre con el bucle hacia adelante (espero que se entienda):
| Código: | [*0=L1, 1=L2, 2=L3, 3=L4, 4=L5, 5=L6] .. ComponentCount=6 nItem=0
Se ha borrado L1
[0=L2, *1=L3, 2=L4, 3=L5, 4=L6] ........ ComponentCount=5 nItem=1
Se ha borrado L3
[0=L2, 1=L4, *2=L5, 3=L6] .............. ComponentCount=4 nItem=2
Se ha borrado L5
ComponentCount=3 nItem=3 (el bucle no sigue porque nItem ya no es menor que ComponentCount) |
Y con el bucle empezando por el final:
| Código: | [0=L1, 1=L2, 2=L3, 3=L4, 4=L5, *5=L6] .. ComponentCount=6 nItem=ComponentCount-1=5
Se ha borrado L6
[0=L1, 1=L2, 2=L3, 3=L4, *4=L5] ........ ComponentCount=5 nItem-1=4
Se ha borrado L5
[0=L1, 1=L2, 2=L3, *3=L4] .............. ComponentCount=4 nItem-1=3
Se ha borrado L4
[0=L1, 1=L2, *2=L3] .................... ComponentCount=3 nItem-1=2
Se ha borrado L3
[0=L1, *1=L2] .......................... ComponentCount=2 nItem-1=1
Se ha borrado L2
[*0=L1] ................................ ComponentCount=1 nItem-1=0
Se ha borrado L1
nItem-1=-1 (el bucle no sigue porque nItem ya no es igual o mayor que 0) |
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|