Entwickler-Ecke

Sonstiges (Delphi) - Auf dynamisch erstellte Labels zugreifen


Hoda - Di 08.10.02 11:10
Titel: Auf dynamisch erstellte Labels zugreifen
Hallo.
Da ich meine grenzen austesten will, versuche ich die ganze Zeit mich verrückt zu machen.

An folgendem Sachverhalt bin ich am Schrauben: Ich erzeuge unter "Button1" 5 Labels.

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
... Tform1.Button1Click...
var i : integer;
begin 
for i := 1 to 5 do begin
  MyLabel := TLabel.Creat(self);
  MYlabel.Parent := self;
  Mylabel.Name := 'MYLabel' + intToStr(i);
  Mylabel.Caption := 'Meine Label';
end;
end;
soweit so gut. Es funktioniert :P

Hautproblem oder was ich machen möchte ist, die Labels die ich erstellt habe, anzusprechen. So dass ich den 3.Label oder 2.Label verändern kann. Beispiel den Caption. Nur ich bekommes nicht hin. Es wird immer der zur letzt angelegte Label verändert.

Meine Frage an euch ist: "WIE ode WAS muss ich machen, damit ich die Labels ansprechen kann ?!":? :roll:

Gruß + Danke
Hoda

(08.10.02 13:14 Tino) Titel geändert & Code-Tags hinzugefügt.


LCS - Di 08.10.02 11:42

Hi
Wenn du tatsächlich exakt diesen Code verwendest, hast du zuerst mal das Problem, dass die 5 Labels exakt übereinander liegen. Damit siehst du praktisch immer nur den obersten.
Um ein einzelnes Label anzusprechen könntest du die Methode FindComponent verwenden:

Quelltext
1:
2:
  with FindComponent('MYLabel1') as TLabel do
     Caption := 'test';

Übrigens: An der Aussagekraft deiner Titel musst du noch stark arbeiten :shock:

Gruss Lothar


Rooof - Mi 09.10.02 07:07

Hi

Du könntest dieses Problem allenfalls auch mit einer Liste lösen.

Dieses würde dann ungefähr so aussehen:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
... Tform1.Button1Click... 
var i : integer;
    PObjectList: TObjectList; 
begin 
PObjectList := TObjectList.create;
for i := 1 to 5 do begin 
  MyLabel := TLabel.Creat(self); 
  MYlabel.Parent := self; 
  Mylabel.Name := 'MYLabel' + intToStr(i); 
  Mylabel.Caption := 'Meine Label';
  PObjectList.add(Mylabel);
end; 
end;


Um dann wieder auf das Label zugreiffen zu können, kannst du direkt mit TLabel(PObjectList.Items[index des labels]).Caption := 'Das hier ist neuer Text'; darauf zugreiffen.

Das TLabel vorweg dient zum Casten des Labels, da die Liste nicht weiss, welcher ObjectTyp sich an der Adresse befindet, wo der Pointer drauf zeigt. Einfach so nachbasteln und es sollte funktionieren. Ansonsten Online-Hilfe zur Hand nehmen

Mfg
Rooof


Hoda - Mi 09.10.02 07:35
Titel: Auf dynamisch erstellte Labels zugreifen
Danke Rooof.
Diese Variante werde ich auch testen.

Wie du natürlich weiß, je mehr man über unterschiedlicher Formen des Programmierens kennt, desto mehr ist man kreativ oder? :lol:

Ich bin jetzt dabei die Dynamischen Labels per Drag&Drop zu bewegen.
Mal sehen wie weit ich vorankomme. :roll:

Gruß
Hoda