![]() |
viele ähnliche Befehle zusammenfassen
nicht unbedingt wie ihr jetzt denkt
for to und all das kenn ich, nur ich hab ein anderes Problem. Wenn ich sagen wir mal Label01.Caption, label02.Caption,...,Label20.Caption habe, wie kann ich in einer schleife bestimmen dass sich ein Teil des Namens der Bezeichnung ändert, um nicht immer hintereinander irgendwelche ähnlichen Labeldefinitionen schreiben zu müssen. Iwie so vll :gruebel:
Delphi-Quellcode:
aber das klappt nicht, wär ja auch zu einfach dann^^
for x:=1 to 20 do begin
(label+'x').Caption:='Hallo'+inttostr(x); end; wie geht das richtig? lg cRayZo |
Re: viele ähnliche Befehle zusammenfassen
Findcomponent ist dein Freund.
Aber wäre es vielleicht nicht besser (je nach deinem Konzept) alles in eine array oder, noch besser, in eine TobjectList zu packen? |
Re: viele ähnliche Befehle zusammenfassen
Hi,
eine weitere Möglichkeit ist es, die Liste Components des Owner nach den Labels zu durchsuchen. Das macht natürlich nur Sinn, wenn du alle Labels oder einen mathematisch eingrenzbaren Bereich bearbeiten möchtest. In meinem Bsp. soll der Owner ein Panel (Panel1) sein.
Delphi-Quellcode:
Du kannst natürlich auch auf den Componentennamen mittels (Panel1.Components[Counter] as TLable).Name als String zugreifen und für die Bearbeitung die entsprechenden Labels "filtern".
For Counter := 0 to Panel1.ComponentCount - 1 do
IF Panel1.Components[Counter] is TLable then (Panel1.Components[Counter] as TLable).Caption := 'Hallo'; Sirius Methode läuft sozusagen anders herum. Du bildest wie in deinem Beispiel einen Namen und übergibst diesen FindComponent. Wird das passende Label gefunden, so liefert FindComponent dieses zurück. Damit kannst du dann auch auf die Caption zugreifen.
Delphi-Quellcode:
Gruß oki
var Lable : TLable;
LableName : String; ... For Counter := 0 to 20 do begin LableName := Format('Lable%d', [Counter]); Lable := self.FindComponent(LableName); If Assigned(Lable) then Lable.Caption := 'Hallo'; end; |
Re: viele ähnliche Befehle zusammenfassen
Hi oki,
ich hoffe doch mal, dass dein Lable ein schlimmer Tippfehler ist... |
Re: viele ähnliche Befehle zusammenfassen
Upppps :oops:
Kann man das irgentwie löschen? :-D P.S. War doch Absicht! Wollte nur testen ob jemand aufpasst! Gruß oki |
Re: viele ähnliche Befehle zusammenfassen
Zitat:
wenn ich jetzt aber bei diesem Beispiel werden ja einfach alle Components mit Tlabel umbenannt. Was ich ja ursprünglich wollte, ist, dass ich pro schleifendurchgang jeweils ein anderes Label anspreche, dessen caption ich verändern möchte. Die labels sind numerisch, mit dem Wort "Label" davor, sortiert. Kann man das nicht genauso einfach machen, wie mit deiner Lösung? Zitat:
lg cRayZo |
Re: viele ähnliche Befehle zusammenfassen
Zitat:
Variablennamen werden zur Laufzeit nicht mitgenommen. Die Varianten von oki und mir funktionieren nur, weil die Klasse TComponent (und alle Nachfahren) den Komponentennamen dann doch mitspeichert. |
Re: viele ähnliche Befehle zusammenfassen
Für soetwas würde ich die n Label in ein Array packen und dynamisch erzeugen, ober aber automatisch erzeugen lassen und dann in ein array schreiben (das kannst du dann wiederum mit findcomponents bzw. Panel1.Components machen).
Dynamisch erzeugen:
Delphi-Quellcode:
type
Form1 = class(Tform) [...] Label : array[1..20] of TLabel; [...] for i:=1 to 20 do Label[i] := TLabel.Create(Self); // Dann noch Parent zuweisen und positionieren for i:=1 to 20 do Label[i].Caption := 'Hallo ' + IntToStr(i); [...] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz