PDA

Ver la Versión Completa : Como moverse por un conjunto de edits


miguelml
15-11-2005, 15:16:45
Hola, necesito ayuda, tengo un grupo de edits que llegan desde edit1 a edit16, i necesito recorrer edit por edit para meter su valor en un tabla.


for i:=1 to 16 do
begin
table1.edit;
table1.Fields[i+2].value:=edit+'i'+.text;
table1.post;
end;

no se si se puede hacer algo similar a esto, si alguien me sugiere algo, o me corrige en que fallo...

muchas gracias!

yusnerqui
15-11-2005, 15:54:02
Bueno una solución puede ser usar el método FindComponent del Form que los contiene.

Así puedes decir:

for i:=1 to 16 do
begin
table1.edit;
table1.Fields[i+2].value:=TEdit(FindComponent('Edit'+IntToStr(i)).text;
table1.post;
end;



También recomendarte que uses etiquetas VB para la mejor visualización de tu código

Saludos Yusnerqui.

ilichhernandez
15-11-2005, 16:18:41
Prueba con esto ....


for n:=(Form1.ComponentCount -1) downto 0 do
begin
if ((Components[n] is TEdit) and (Components[n].tag = 1)) then
begin
tabla[n] := TEdit(Components[n]).text;
end;
end;



saludos...

miguelml
15-11-2005, 16:22:28
Muchisimas gracias!! funciona de perlas, el codigo es:

showmessage(TEdit(FindComponent('Edit'+IntToStr(i))).Text);


faltava un ")", aun asi gracias, adios.

ilichhernandez
15-11-2005, 16:40:22
Me falto algo , primero pasa los valores de los edit a su tag asi...


edit1.tag := edit1.text;


de esa manera tandras el valor...

luego

for n:=(Form1.ComponentCount -1) downto 0 do
begin
if ((Components[n] is TEdit) and (Components[n].tag <> 0')) then
begin
lista[n] := TEdit(Components[n]).tag;
end;
end;



No es la mejor programacion pero creo que debiera resultar !!!

saludos.

roman
15-11-2005, 16:55:48
No es la mejor programacion pero creo que debiera resultar !!!


No sé si sea la mejor, pero si será más eficiente que FindComponent. FindComponente utiliza un ciclo que recorre las componentes de un formualrio para buscar la del nombre dado, de manera que hacer un ciclo que use FindComponente significa recorrer dos veces las componentes.

// Saludos

yusnerqui
15-11-2005, 17:35:42
Roman tiene razón, pero es que como la propia ayuda de delphi lo usa dentro de un ciclo, pues pensé que no era tan malo....

The following example creates 20 edit boxes, using FindComponent with the edit box name to access each newly created edit box.

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
const
NamePrefix = 'MyEdit';
begin
for i := 1 to 20 do begin
TEdit.Create(Self).Name := NamePrefix + IntToStr(i);
with TEdit(FindComponent(NamePrefix + IntToStr(i))) do
begin
Left := 10;
Top := i * 20;
Parent := self;
end;
end;
end;

De todos modos siempre podrás definirte un arreglo donde sus elementos apunten a cada uno de los edits y recorrerlo, son algunas líneas de código más, pero será mucho mas eficiente.
Digo eso creo.:confused:

Saludos:D

roman
15-11-2005, 18:26:22
Lo sé, lo sé. Pero, por esta vez, el ejemplo de Delphi es francamente malo. ¿Para qué buscar una componente que se acaba de construir y por tanto se tiene (o se puede tener) su referencia a la mano?

// Saludos