Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#5

Re: Eingabebeschränkung f. eine Gruppe EditControls u. m.

  Alt 13. Mär 2006, 21:15
Zu deinen Arrays gibt es eigentlich gar nicht so viel zu sagen. Wenn du (wovon ich mal ausgehe) alle Edits schon zu Designzeit kennst, dann kannst du es sehr statisch angehen.
Für den Fall, dass du die Edits dynamisch (zur Laufzeit) erstellst, so kannst du mittels FindControl (Controls sind nocht spezieller aller Components) nach allen Edits suchen.
Arrays gibt es nun wiederum in zwei "Fassungen", statisch und dynamisch. Bei statischen Arrays steht die Größe von Anfang an fest, du legst die einfach mittels
Delphi-Quellcode:
var Array1 : Array[0..200] of String;
    Array2 : Array[10..20] of Integer;
    Array3 : Array[0..1, 0..1] of Char;
an. Du erzeugst Felder (Arrays) der Größe, die in den eckigen Klammern stehen. Für den ersten Fall kannst du dann auf alle Felder zwischen 0 und 200 zugreifen. Der Index kann beginnen wo du es festlegst. Im letzten Fall hast du eine Matrix (Array of Array).

Möchtest du auf ein Feld zugreifen, so geschieht das über den Index, du schreibst nur eine Zahl in eine eckige Klammer
Delphi-Quellcode:
var array1 : Array[1..10] of Char;
begin
  array1[1] := 'H';
  array1[2] := 'a';
  ...
end;
Was nicht geht sind Zugriffe auf die 0 oder 11 (halt alles ausserhalb der Grenzen).

Bei dynamischen Arrays steht die Größe nicht fest. Sie kann auch jederzeit geändert werden. Ganz wichtig für dynamische Arrays, sie sind immer Null indiziert. Ihre Größe legst du mit setLength(array, length) fest. Mittels high(array) bekommst du den letzten gültigen Index, mittels length(array) die Gesamtlänge. Wichtig ist hier zu beachten, dass length die Länge angibt. Da dass Array 0 indiziert ist, kannst du also nur auf Werte zwischen 0 und length(array) - 1 zugreifen.

Für dich wäre es also wichtig einfach ein Array vom Typ TEdit anzulegen. Einfaches Beispiel wäre hier in das OnCreate-Ereignis etwas aufzunehmen wie
Delphi-Quellcode:
// sollte ohne das var in den private Teil deines Forms
var Edits : Array of TEdit;

....
  // in der onCreate
  setLength(Edits, ANZAHL_DEINER_EDITS);
  Edits[0] := Edit1; // hoffentlich sinnvoller benannt
  Edits[1] := Edit2;
  ....
Wenn du Edits global (z.B. im private Teil deiner übergeordneten Klasse) anlegst, dann kannst du von jeder Methode der Klasse auf dieses Array zugreifen. Sollen nun alle Eingaben validiert werden, kannst du das leicht mit zwei Methoden machen.

Delphi-Quellcode:
procedure validate(const Edit : TEdit);
begin
  if Trim(Edit.Text) = 'then
    begin
      Edit.Color := clRed; // oder was auch immer
    end
  else
   ...
end;

procedure validateAll;
var i : Integer;
begin
  for i := low(self.Edits) to high(self.Edits) do
    begin
      validate(Edits[i]);
    end;
end;
Das ist es eigentlich auch schon. Ist jetzt ein wenig umständlich erklärt, hilft dir aber vielleicht weiter. An sich solltest du immer sehr abstrakt arbeiten, dass macht vieles leichter (ist aber ein Thema für sich). Also hier meine ich damit wirklich nur, dass du von den konkreten Edits abstrahieren kannst, die du gerade validieren möchtest. Codewiederholung führt immer leicht zu Fehlern bei Änderungen. Deshalb sollte sich wiederholender Code immer (möglichst) in eine eigene Methode.

Gruß Der Unwissende
  Mit Zitat antworten Zitat