Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Error con Sender (https://www.clubdelphi.com/foros/showthread.php?t=87807)

sac 27-02-2015 13:33:28

Error con Sender
 
Perdón la ignorancia pero para ustedes esto debe ser facil de solucionar.
Cuando estoy en el form1 tengo un procedure "limpiar" para borrar todos los edits.
Obviamente la linea que escribí es:

Código Delphi [-]
Procedure Limpiar;
Begin
if (Sender is TEdit) then
    TEdit(Sender).Text:='';
end;

El Problema es que sale un error en compilación con la leyenda undeclared identifier:'Sender'.
Cuando se hace referencia a otra unidad (ej. unit2) es suficiente con poner delante Form2..... etc pero como hace referencia a la misma unidad no se como solucionarlo.
Que hago?

Casimiro Notevi 27-02-2015 14:06:33

Tienes que hacer un bucle para recorrer todos los componentes que hay en el Form.
Si es un Label entonces lo limpias.
Busca por FindComponent

Kiranov 27-02-2015 15:00:59

Buenos dias,

El sender es un objeto que pasas como parametro, por ejemplo asi:
Código Delphi [-]
procedure Tacceso.FormCreate(Sender: TObject);
Mas bien, como dice casimiro, tal vez con un bucle como este pudiera resultar:
Código Delphi [-]
for i:=0 to acceso.ControlCount-1 do
    begin
      if acceso.Controls[i] is tedit then tedit(acceso.Controls[i]).Text:='';
    end;

No probe ese codigo pero es para que te des una idea masomenos...

Cuando haces referencia al mismo form en el que estas trabajando no hace falta anteponer nada aunque puedes poner el nombre del form o usar la instruccion "Self" para hacer referencia al mismo formulario en el que estas trabajando.

Saludos!

ecfisa 27-02-2015 15:18:36

Hola sac.

Es tál cuál como te han comentado los compañeros. Pero vale aclarar que si usas un procedimiento aislado, deberás enviarle el Parent (form) de los Edits como argumento:
Código Delphi [-]
procedure Limpiar(aForm: TForm);
var
  i: Integer;
begin
  for i:= 0 to aForm.ControlCount-1 do
    if aForm.Controls[i].ClassType = TEdit then
      TEdit(aForm.Controls[i]).Clear;
end;

// Llamada (requiere parámetro)
procedure TForm1.btnLimpiarClick(Sender: TObject);
begin
  Limpiar(Self);
end;
En cambio si lo declaras como método del form no es necesario:
Código Delphi [-]
type
  TForm1 = class(TForm)
  ...
  private
    procedure Limpiar;
  end;
...

procedure TForm1.Limpiar;
var
  i: Integer;
begin
  for i:= 0 to ControlCount-1 do
    if Controls[i].ClassType = TEdit then
      TEdit(Controls[i]).Clear;
end;

// Llamada (el parámetro es innecesario)
procedure TForm1.btnLimpiarClick(Sender: TObject);
begin
  Limpiar;
end;


Saludos :)

sac 28-02-2015 16:14:29

Gracias
 
Gracias a todos. me dieron una pequeña-gran lección.
Ecfisa como siempre una gran ayuda.
Ahora si, todo perfecto.


La franja horaria es GMT +2. Ahora son las 20:08:30.

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