Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Nombre de Tedits creados en ejecución (https://www.clubdelphi.com/foros/showthread.php?t=30909)

edusus 23-04-2006 13:36:11

Nombre de Tedits creados en ejecución
 
Hola a todos.
Con el siguiente código creo TEdits en tiempo de ejecución, pero ¿cómo puedo saber el nombre de cada edit para trabajar con ellos?
He probado con MiEdit1, MiEdit2... ya que se supone que tiene que ser TEdit más el valor de N pero no funciona.
Gracias por la ayuda.

edusus 23-04-2006 13:37:05

olvido
 
Perdón me había olvidado de mandar el código:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  N: integer; 
  MiEdit: array[1..10] of TEdit;
begin
  N:= 1;
  X:=20;
  Repeat
  begin
    MiEdit[N] := TEdit.Create(Self);
    MiEdit[N].Parent := Self;
    MiEdit[N].Width:= 150;
    miedit[N].Left:= 60;
    miedit[N].Top:= X;
    N:= N + 1;
    X:= X + 25;
  end;
  until N = 10;
end;

marcoszorrilla 23-04-2006 14:16:03

Mira este ejemplo:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
n: integer;
x: Integer;
MiEdit:  TEdit;
begin
N:= 1;
X:=20;
  Repeat
  begin
  MiEdit := TEdit.Create(Self);
  MiEdit.Parent := Self;
  MiEdit.Width:= 150;
  miedit.Left:= 60;
  miedit.Top:= X;
  miedit.Name:='Miedit'+IntToSTr(n);

  N:= N + 1;
  X:= X + 25;
  end;
  until
N = 10;
end;
Un Saludo.

edusus 23-04-2006 14:33:28

TEdits en t.de ejecución
 
Gracias Marcos, pero mira hay un error.
Con el código que mandas se crean TEdits con el texto escrito por defecto: Miedit1, Miedit2.... pero estos tedits no responden a ese nombre, por ejemplo, si añado un botón con el código: Miedit2.text:= 'Hola'; verás que te da error.
Gracias por tu respuesta

German 23-04-2006 16:53:55

Te dará error por que el nombre del control no existe hasta haber ejecutado el código. Si en vez de lo que propones, escribes el siguiente código, veras que no da error:

(FindComponent('MiEdit2') as tEdit).text := 'Hola';

Salu2.

Ruben_Cu 23-04-2006 17:12:10

No existe MiEdit2
 
Hola edusus, claro que al tratar de asignale 'Hola' a la propiedad text te indica error puesto que la componente, al querer ejecutar el procedimiento con el botón dos, no existe. MiEdit2 solo existe después que has ejecutado el procediento con el botón uno y entonces tienes que buscar la componente para poder asignarle el texto o leer el que tenga escrito.
Prueba el siguiente código, tienes que incluir dentro del bucle del botón uno una asignación de un valor a la propiedad Tag, en este caso lo mejor es el mismo valor de la variable N, de Tag, sería agregar en el ejemplo de marcoszorrilla.
Código Delphi [-]
  miedit.Name:='Miedit'+IntToSTr(n);
  MiEdit.Tag:=N; //línea agregada
  N:= N + 1;

Ahora coloca dentro de del botón 2 lo siguiente
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var m:integer;
    Casilla: TComponent;
begin
   for m:=0 to ComponentCount-1 do begin
   Casilla:= Components[m];
   if (Casilla is TEdit) then
      case TEdit(Casilla).Tag of
        1:TEdit(Casilla).text:='Hola';
        2:TEdit(Casilla).text:='Mi';
        3:TEdit(Casilla).text:='Amigo';
        4:TEdit(Casilla).text:='Miguel Angel';
        5:TEdit(Casilla).text:='es un';
        6:TEdit(Casilla).text:='placer';
        7:TEdit(Casilla).text:='saludarte';
        8:TEdit(Casilla).text:='este';
        9:TEdit(Casilla).text:='domingo.';
        end;
   end;
end;
Al ejucutarlo se logra asignar texto a cada uno de los edit creados, en lugar del Case se pudiera utilizar If..Then y tambien crear una función a la que llamar para leer o escribir en un edit en específico a partir del Tag asignado.
Esto puede ser una solución, esta fue la que se me ocurrió de seguro deben haber otras. El inveniente de esta es que hay que recorrer las componentes del formulario, que si tiene muchas retarda en algo la respuesta.
Espero te sirva para ilustrar el caso y lo aprovecho para mandar un saludo a un amigo.
Saludos

roman 23-04-2006 19:55:13

Tú mismo tienes la solución a tu problema. Si ya has visto que puedes manipular los controles creados mediante el arreglo MiEdit no veo para qué insistir en asignarles un nombre. A fin de cuentas, no hay gran diferencia entre escribir MiEdit2 y MiEdit[2].

El nombre de un control realmente sólo tiene sentido cuando se añade directamente al formulario durante el diseño.

Lo único que necesitas es "promover" la variable local

MiEdit: array[1..10] of TEdit;

a nivel del formulario:

Código Delphi [-]
TForm1 = class(TForm)
private
  MiEdit: array[1..10] of TEdit;
end;

Así, aún después de creados los controles, podrás acceder a ellos con el arreglo.

// Saludos


La franja horaria es GMT +2. Ahora son las 15:02:19.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi