Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - array problem...


kabizolis - Mi 15.06.05 15:51
Titel: array problem...
ich lege in meiner form 2 arrays fest:


Delphi-Quelltext
1:
2:
3:
var
  Labell: array of TLabel;
  Editl: array of TEdit;


dann lege ich in formcreate die länge der arrays fest:


Delphi-Quelltext
1:
2:
3:
 {Länge der Arrays festlegen}
 setlength(Editl, 10);
 setlength(Labell, 10);


ich weise dann bestehende buttons resp. labels den arrayeinträgen zu:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
 {Editfelder in Array übernehmen}
 Editl[0] := Form2.Edit32;
 Editl[1] := Form2.Edit33;
 Editl[2] := Form2.Edit34;
 Editl[3] := Form2.Edit35;
 Editl[4] := Form2.Edit36;
 Editl[5] := Form2.Edit37;
 Editl[6] := Form2.Edit38;
 Editl[7] := Form2.Edit39;
 Editl[8] := Form2.Edit40;
 Editl[9] := Form2.Edit41;

{Labels in Array übernehmen}
 Labell[0] := Form2.Label17;
 Labell[1] := Form2.Label44;
 Labell[2] := Form2.Label45;
 Labell[3] := Form2.Label46;
 Labell[4] := Form2.Label47;
 Labell[5] := Form2.Label48;
 Labell[6] := Form2.Label49;
 Labell[7] := Form2.Label50;
 Labell[8] := Form2.Label51;
 Labell[9] := Form2.Label52;


die labels und buttons sind standardmässig aus "visible := false" gesetzt

wenn ich sie anzeigen will:


Delphi-Quelltext
1:
2:
3:
4:
5:
 for n := 0 to 9
  do begin
   Labell[n].Visible := true;
   Editl[n].Visible := true;
  end;


werden nur die labels angezeigt....

wo liegt mein fehler? ich hab' schon etliche methoden versucht...


jaenicke - Mi 15.06.05 15:57

Das kannst du aber viel einfacher machen!

Delphi-Quelltext
1:
2:
3:
4:
5:
for i := 0 to Self.ComponentCount - 1 do
  if Self.Components[i] is TEdit then
    (Self.Components[i] as TEdit).Visible := True
  else if Self.Components[i] is TLabel then
    (Self.Components[i] as TLabel).Visible := True;

Falls nur bestimmte Edits oder Labels angesprochen werden sollen, kannst du bei denen im Objektinspektor Tag auf einen bestimmten Wert setzen und nur, wenn der stimmt, Visible ändern...

//edit:
Vielleicht noch ne kurze Erklärung dazu...

In der for-Schleife geht man durch alle Komponenten auf dem aktuellen Formular (Self) und wenn es ein TEdit ist macht man was, wobei man mit as sagt, dass die Komponente als TEdit behandelt werden soll. (Sonst weiss Delphi nicht, welche Eigenschaften usw. die Komponente hat...)


kabizolis - Mi 15.06.05 16:28

ehm...
das hab' ich mit meinen beschränkten kentnisse wohl noch nicht ganz verstanden...

aber danke!


jaenicke - Mi 15.06.05 16:35


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
for i := 0 to Self.ComponentCount - 1 do
  //ComponentCount gibt an wieviele Komponenten auf dem Fomular liegen
  //Self ist einfach nur das aktuelle Formular, also praktisch dasselbe wie Form1
  //Du gehst damit also durch alle Komponenten durch
  if Self.Components[i] is TEdit then  
    //Self.Components[i] ist die i-te Komponente
    //Du fragst an dieser Stelle, ob es sich dabei um ein Edit-Feld handelt
    (Self.Components[i] as TEdit).Visible := True  
      //Wenn es ein Edit-Feld ist, dann soll es als solches behandelt werden (as)
      //In deutsch also "Die Eigenschaft Visible, wenn man die 
      //i-te Komponente als TEdit betrachtet"
  else if Self.Components[i] is TLabel then  
    (Self.Components[i] as TLabel).Visible := True;
  //Und nochmal daselbe fuer die Labels

Und wenn du das nicht verstehst dann frag weiter nach, denn es geht hier ja vor allem darum, etwas zu lernen! :dance2:

Wenn du etwas nicht sofort verstehst :nixweiss: , ist das auch normal, aber gib dann nicht einfach auf sondern frag nach den Dingen die du nicht verstehst :wink: .