Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Saber si existe algún TComboBox o un TEdit sin llenar. (https://www.clubdelphi.com/foros/showthread.php?t=65527)

Roilo 22-12-2009 19:24:43

Saber si existe algún TComboBox o un TEdit sin llenar.
 
Saludos al foro y feliz año nuevo para todos!
Me remito a ustedes para ver si me pueden dar la letra de lo que quiero:

Resulta que en un Tform tengo como 10 TComboBox y 12 TEdit. Quisiera que cuando se presionara el boton Aceptar, el programa me avisara si hay alguno de estos componente vacío.
este código es lo más cerca que ha podido llegar:

Código Delphi [-]
for i:=FControl.ControlCount-1 downto 0 do
   if (FControl.Controls[i] is TComboBox) or  (FControl.Controls[i] is TEdit) then
        if FControl.Controls[i].text = '' then FControl.Controls[i].color := ClRed ;

por supuesto, me da error. pero creo que deje clara mi intensión.
Gracias de antemanos.

jorge82 22-12-2009 19:47:39

A ver si así te sirve:
Código Delphi [-]
for I := ControlCount-1 downto 0 do
    if Controls[i] is TComboBox then
    begin
      if TComboBox(Controls[i]).Text = '' then
        TComboBox(Controls[i]).Color := clRed;
    end
    else if Controls[i] is TEdit then
    begin
      if TEdit(Controls[i]).Text = '' then
        TEdit(Controls[i]).Color := clRed;
    end;
Saludos.

Roilo 22-12-2009 20:11:39

casi, casi.
 
Hola Jorge.
tu código se acerca más, pero no me pone en rojo a ninguno de los TEdit o TCombobox que dejo sin llenar.
Gracias por la luz, seguiremos en contaco.

Roilo 22-12-2009 20:48:15

Creo que lo logramos!!!
 
bueno, que no me ponía en rojo los componentes vacíos porque los tenía en GroupBox diferentes (GBInf y GBDPers). Tube que especificar lo siguiente:
Código Delphi [-]
for I := GBDPers.ControlCount-1 downto 0 do
    begin

     if GBDPers.Controls[i] is TComboBox then
       if TComboBox(GBDPers.Controls[i]).Text = '' then
         TComboBox(GBDPers.Controls[i]).Color := clRed;

     if GBDPers.Controls[i] is TEdit then
       if TEdit(GBDPers.Controls[i]).Text = '' then
         TEdit(GBDPers.Controls[i]).Color := clRed;
    end ;

  for I := GBInf.ControlCount-1 downto 0 do
    begin

     if GBInf.Controls[i] is TComboBox then
       if TComboBox(GBInf.Controls[i]).Text = '' then
         TComboBox(GBInf.Controls[i]).Color := clRed;

     if GBInf.Controls[i] is TEdit then
       if TEdit(GBInf.Controls[i]).Text = '' then
         TEdit(GBInf.Controls[i]).Color := clRed;
    end ;
Gracias por la ayuda Jorge!!!

cloayza 23-12-2009 14:26:06

Otra solucion...Yo utilizo esta forma.

El unico pero, es que en la llamada tienes que incluir el vector de todos los controles que deseas evaluar (Ejemplo 2). Al final creo que es mejor te da mas control.

Código Delphi [-]
type
  TForm1 = class(TForm)
    ComboBox1: TComboBox;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Procedure CheckControl(Sender:TObject);overload;
    Procedure CheckControl(Sender:Array Of TObject);overload;
  end;

Procedure TForm1.CheckControl(Sender:TObject);
begin
     If (Sender Is TComboBox) Then
        If TComboBox(Sender).Text='' Then
           TComboBox(Sender).Color:=clRed;

     If (Sender Is TEdit) Then
        If TEdit(Sender).Text='' Then
           TEdit(Sender).Color:=clRed
end;

Procedure TForm1.CheckControl(Sender:Array Of TObject);
Var
     i:Integer;
Begin
     For i:=Low(Sender) To High(Sender) Do
         CheckControl(Sender[i]);
End;

procedure TForm1.Button1Click(Sender: TObject);
begin
     //Ejemplo 1: Es llamada con un objeto.
     //CheckControl(ComboBox1);

      //Ejemplo 2: Es llamada con un vector de controles.
     CheckControl([ComboBox1,Edit1]);
end;


La franja horaria es GMT +2. Ahora son las 10:25: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