Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Iteraccion al validar (https://www.clubdelphi.com/foros/showthread.php?t=54746)

dfarias 28-03-2008 21:58:26

Iteraccion al validar
 
Como puedo hacar para usar un solo procedimiento para validar x cantidad de campos TMaskEdit;

Los campos se llaman txtHE11, txtHE12, txtHE21, txHE22, ... y asi susesivamente



Quiero que antes de salir del form valide el contenido de cada uno de estos campos y la forma de validarlos en igual para todos.

Existe alguna forma usando un bucle

Muchas gracias.

dec 28-03-2008 22:51:57

Hola,

Suponiendo que vayas a utilizar un mismo método (evento) para realizar la validación, se trata de "hacérselo saber" a los componentes oportunos. Es decir, por ejemplo:

Código Delphi [-]

implementation

procedure TForm1.SharedMethod(Sender: TObject);
begin
  /* Aquí puedes hacer lo que necesites */
end;

procedure TForm1.OnCreate(Sender: TObject);
begin
  Button1.OnClick := SharedMethod();
  Button2.OnClick := SharedMethod();
  Button3.OnClick := SharedMethod();
  /* */
end;

keyboy 29-03-2008 01:15:40

Mmm. Pero, creo que no se trata de asignar un mismo método (evento) a varios controles sino aplicar el mismo método (validación) a varios controles.

Puede optar por hacerlo a pie:

Código Delphi [-]
Validar(MaskEdit1.Text);
Validar(MaskEdit2.Text);
Validar(MaskEdit3.Text);
...

o tratar de usar un ciclo:

Código Delphi [-]
for I := 0 to High(MaskEditList) do
  Validar(MaskEditList[i].Text);

donde MaskEditList sería un arreglo de controles TMaskEdit. Este arreglo puede existir de manera "natural", si todos los MaskEdit están en un contenedor y dicho contenedor no contiene nada más, pues se usa el arreglo Controls del contenedor. O bien se crea artificialmente:

Código Delphi [-]
type
  TForm1 = class(TForm)
  private
    MaskEditList: array of TMaskEdit;
  end;

pero de todas formas hay que llenarlo en algún momento:

Código Delphi [-]
SetLength(MaskEditList, N);
MaskEditList[0] := MaskEdit1;
MaskEditList[1] := MaskEdit2;
MaskEditList[2] := MaskEdit3;
...

con lo que regresamos a lo mismo, pero comienza a ser útil si requerimos hacer varias operaciones sobre esa lista de controles.

Finalmente, podría uno estar tentado al FindComponent:

Código Delphi [-]
for I := 1 to N do
  Validar(TMaskEdit(FindComponent('MaskEdit' + IntToStr(I)).Text)

que se ve bien pero no es óptimo ya que FindComponent debe revisar todos los controles en el formulario para buscar uno con el nombre dado, con lo que se tiene en realidad un doble ciclo.

Bye

jacanche 29-03-2008 02:00:04

Tambien puedes iterar a través de la lista de componentes de la forma, evaluar si es un TMaskEdit y hacer la validacion; algo como esto:

Código Delphi [-]
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  Index : Integer;

begin
CanClose := True;
    for Index := 0 to Componentcount-1 do
    begin
      if Components[Index] is TMaskEdit then
         begin
         if not Validar(TMaskEdit(Components[Index])) then //Validar es una funcion que devolveria verdadero si se cumple la validacion, falso en caso contrario
            begin
            ShowMessage('Error de Validación');
            CanClose := False;
            break;
            end;
         end;
    end;
end;

keyboy 29-03-2008 02:03:53

Esta opción es buena. El único pero que le veo es si hay otros controles MaskEdit en el formulario además de los que se quiere validar.

Bye

jacanche 29-03-2008 06:42:14

Tienes razon, quizas habria que buscar una manera para especificar cuales se quieren validar, por ejemplo, poniendo un valor en el tag, un 1 quizas y modificando el codigo a algo asi :
Código Delphi [-]
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
  Index : Integer;

begin
CanClose := True;
    for Index := 0 to Componentcount-1 do
    begin
      if Components[Index] is TMaskEdit then
         begin
         if TMaskEdit(Components[Index]).Tag=1 then
              if not Validar(TMaskEdit(Components[Index])) then //Validar es una funcion que devolveria verdadero si se cumple la validacion, falso en caso contrario
                 begin
                 ShowMessage('Error de Validación');
                 CanClose := False;
                 break;
                 end;
         end;
    end;
end;

dfarias 31-03-2008 11:55:48

Jacanche, es lo que estaba necesitando. Muchas gracias colega.


La franja horaria es GMT +2. Ahora son las 07:08:37.

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