PDA

Ver la Versión Completa : Labels con el final de nombre distinto


richi
19-10-2006, 13:58:51
Hola a todos y gracias por anticipado. Pido perdon si el titulo no corresponde mucho con la pregunta. El caso es que tengo varias labels con el mismo nombre que solo cambia el final siendo 1,2,3,... y lo que me interasaria saber como puedo hacer con un bucle For recorrerlas. lo que probe pero no funciono fue lo siguiente:

for i:=1 to 10 do
begin
label + 1.caption:= 'a';
end;

.

Neftali [Germán.Estévez]
19-10-2006, 14:18:43
Utiliza FindComponent. Si buscas en los foros encontrarás mucho código para usalo (en la ayuda de Delphi también).

seoane
19-10-2006, 14:26:29
Utiliza algo como esto:

var
i: integer;
C: TComponent;
begin
for i:= 1 to 10 do
begin
C:= FindComponent('Label'+IntTostr(i));
if (C <> nil) and (C is TLabel) then
TLabel(C).Caption:= 'A';
end;
end;

Lepe
19-10-2006, 16:05:52
Este tema se ha tratado ya varias veces, y la mejor alternativa es usar un TObjectList, busca por el foro, verás hilos que son auténticos manuales.

El problema que "se ha visto anteriormente en este foro" sobre el método usado por Seoane (que yo antes lo usaba ;)) es que si el Form tiene digamos 40 controles más tus 10 labels, se ha de realizar, en el peor de los casos, 500 iteraciones.

10 iteraciones se hacen por el bucle "for i:=0 to 10" (en realidad son 11 iteraciones... pero bueno, dejemos 10 ;))
y en cada iteración se ha de buscar en los 50 controles que tiene tu Form.
Es decir, para localizar el label10, se han de realizar 500 iteraciones.

En un TObjectList, se guardaría unicamente 10 labels, y por tanto, como mucho será 10 iteraciones hasta encontrarlo.

Saludos.

seoane
19-10-2006, 16:50:42
El problema que "se ha visto anteriormente en este foro" sobre el método usado por Seoane (que yo antes lo usaba ;)) es que si el Form tiene digamos 40 controles más tus 10 labels, se ha de realizar, en el peor de los casos, 500 iteraciones.


:D No mates al mensajero, yo también creo que andar buscando los componentes por el nombre no es la solución mas adecuada. Pero es lo que el pedía.

richi
19-10-2006, 17:13:08
Gracias a todos por responder y al final lo que use fue lo que puso seoane.