kilkasprawdzen czy edity nei sa puste

0

Czesc, mam problem ze sprawdzeniem kilkunastu editow czy nie sa puste.

if (Edit1.Text = '') and (Edit2.Text = '') then

dla 2 czy 3 mozna ifem, ale dla kilkunastu to juz sie robi nieladnie.

Jak takie rzeczy sie robi?

0

kilkasprawdzen czy edity nie sa puste

Musiż uszyć tablicyalbo RTTI. To pofinno pomodz.

0

czy tak procedura bedzie dobra, jesli na formie mam edity i maskedity i ich nazwy sa inne od edit1,edit2 itp?

procedure WyczyscPolaEdycyjne(Forma: TForm);
var
  I: Integer;
begin
  for I := 0 to Forma.ComponentCount - 1 do
  begin
    if (Forma.Components[I] is TEdit) or (Forma.Components[I] is TMaskEdit) then
    begin
      TEdit(Forma.Components[I]).Clear;
      TMaskEdit(Forma.Components[I]).Clear;
    end;
  end;

end;
0

Po co rzutujesz jednocześnie na TEdit i na TMaskEdit obie te kontrolki wywodzą sie z TCustomEdit

0

Masz tutaj błąd(np rzutowanie TEdit na TMaskEdit). TEdit oraz TMaskEdit dziedziczą po TCustomEdit. jeżeli nie masz na formie innych komponentów dziedziczących po TCustomEdit to na niego rzutuj.

0

Równie dobrze możesz skorzystać z funkcji FindComponent i w pętli znajdywać poszczególne kontrolki, jeśli ich identyfikatory na to pozwalają; Wtedy nie będziesz musiał sprawdzać ich klas a także przeszukiwać wszystkich kontrolek na danej formie;

Przykładowe użycie:

procedure WyczyscPolaEdycyjne(Forma: TForm);
var
  I: Word;
begin
  for I := 1 to 5 do
    TCustomEdit(FindComponent('Edit' + IntToStr(I))).Clear();
end;

Pętla ustawiona jest od 1 do 5, jeśli kontrolki edycyjne masz nazwane odpowiednio: Edit1, Edit2, Edit3, Edit4 i Edit5; Jeżeli będziesz miał ich więcej no to oczywiście musisz zmienić zakres indeksowania pętli;


Jeżeli masz tych pól więcej i ich identyfikatory nie są ponumerowane kolejno (np. jest Edit1, Edit2, trzeciego nie ma, Edit4 i Edit5) musisz sprawdzić co zwraca funkcja FindComponent;

Przykładowe użycie:

procedure WyczyscPolaEdycyjne(Forma: TForm);
var
  Component: TComponent;
  I: Byte;
begin
  for I := 1 to 5 do
    begin
      Component := FindComponent('Edit' + IntToStr(I));

      if Component <> nil then
        TCustomEdit(Component).Clear();
    end;
end;

zakres pozostaje bez zmian - wystarczy znać numer pierwszego i ostatniego komponentu;

0

dodaj do formy pole - tablicę editów, np.

edity:array[0..2] of TEdit;

potem np. w OnCreate wypełnij tę tablicę:

edity[0] := Edit1;
edity[1] := EditFoo;
edity[2] := EditBla;
0

Mysle, ze obejde sie bez tablic dodatkowych.

obecnie moja procedura wyglada tak i chyba tak pozsotanie (moze byc?)

procedure WyczyscPolaEdycyjne(Forma: TForm);
var
  I: Integer;
begin
  for I := 0 to Forma.ComponentCount - 1 do
  begin
    if (Forma.Components[I] is TCustomEdit) then
      TCustomEdit(Forma.Components[I]).Clear;
  end;
 
end;
0

Jeżeli możesz, łatwiej byłoby skorzystać z pętli foreach.

0

for-in nie moge uzyć :) d7

1 użytkowników online, w tym zalogowanych: 0, gości: 1