Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Prism Zugriff auf Labels auf unterschiedlichen Panels (https://www.delphipraxis.net/77203-zugriff-auf-labels-auf-unterschiedlichen-panels.html)

gfjs 16. Sep 2006 04:26


Zugriff auf Labels auf unterschiedlichen Panels
 
Guten Morgen.

Auf meinem Formular befinden sich mehrere Panels mit wiederum mehreren Labels. Wie kann ich in einer Schleife alle diese Labels durchlaufen? Ich dachte an die Möglichkeit, auf die Labels über die Namen (z.B. Label1 bis Label99) zuzugreifen, etwa in der Form:
Delphi-Quellcode:
for i := 1 to 99 do
begin
  LabelName := 'Label' + i.ToString;
  ???
end;
Leider habe ich nicht herausgefunden, wie ich von dem String "LabelName" zu dem passenden Label komme. Oder gibt es eine andere Möglichkeit, das zu realisieren?

Vielen Dank im Voraus.

Gruß Jürgen.

Balu der Bär 16. Sep 2006 07:19

Re: Zugriff auf Labels auf unterschiedlichen Panels
 
Unter Win32 gibt es die Methode Hier im Forum suchenFindComponent, da ich von .Net keine Ahnung habe müsstest du mal gucken ob du das auch in .Net verwenden kannst. Alternativ könntest du alle Labels in ein Array packen, und dann einfach per Schleife durchgehen.
Delphi-Quellcode:
Labels : array [0..98] of TLabel;

for i := 1 to 99 do
begin
  Labels[i] := 'Label' + i.ToString;
end;

gfjs 16. Sep 2006 07:24

Re: Zugriff auf Labels auf unterschiedlichen Panels
 
@ Balu der Bär

Vielen Dank! - Ich werd's ausprobieren. Aber ich glaube nicht, dass es mein Problem löst. Die Labels sind auf unterschiedlichen Panels, so dass ich eben nicht so ohne weiteres in einer Schleife auf alle Labels zugreifen kann. - Zumindest weiß ich (noch) nicht wie. Außerdem wurde nur das erste Panel mit den darin enthaltenen Labels im OI angelegt. Dann wurde dieses Label zweimal kopiert und die sich daraus ergebende Gruppe noch zweimal. Daurch ist die fortlaufende Numerierung, die Delphi automatisch macht, total durcheinander geraten.

Schönes Wochenende.

Gruß Jürgen

mkinzler 16. Sep 2006 08:21

Re: Zugriff auf Labels auf unterschiedlichen Panels
 
Du könntest die Labels manuell erzeugen und dnn die Reerenzen in einen Array abspeichern.

Balu der Bär 16. Sep 2006 08:28

Re: Zugriff auf Labels auf unterschiedlichen Panels
 
Delphi-Quellcode:
Labels : array[0..98] of TLabel;

for i := 0 to 98 do
begin
 Labels[i] := TLabel.Create(self);
 Labels[i].Caption := 'Label' + i.ToString;
 Labels[i].Top := i + 3;
 Labels[i].Left := i + 4;
 //etc
end;

volkerw 16. Sep 2006 08:39

Re: Zugriff auf Labels auf unterschiedlichen Panels
 
Hallo,
so erreichst Du garantiert jedes Label auf beliebigen Panels:
Delphi-Quellcode:
procedure LabelsOnPanel(Pan: TPanel);
var
  i: integer;
begin
  for i := 0 to Pan.ControlCount - 1 do
    if Pan.Controls[i] is TLabel then (Pan.Controls[i] as TLabel).Caption :=
    IntToStr(i);
end;
Gruß
Volker

gfjs 17. Sep 2006 05:01

Re: Zugriff auf Labels auf unterschiedlichen Panels
 
@ mkinzler

Die Labels alle manuell zu erzeugen wäre sehr mühselig, da es sich um einige Hundert Labels handelt. Ich habe das so gelöst, dass ich die Panels mit den darauf befindlichen Labels mehrmals kopiert habe, aber dadurch kommt die Nummerierung der Panels und Labels total durcheinander - zwar mit System aber trotzdem für meine Zwecke nicht brauchbar.

@ Balu der Bär

Diese Möglichkeit scheint mir für meine Zwecke gut geeignet. Mein Problem ist nämlich, dass ich ein großes Panelhabe, auf dem sich weitere Panels befinden und auf diesen Panels wiederum eine Gruppe von Panels mit den Labels, auf die ich zugreifen will.

@ Volker

So, wie mein Formular jetzt aufgebaut ist, wird Deine Lösung für mich etwas unübersichtlich, aber sie hat mich auf eine Idee gebracht, wie ich mein Formular anders gestalten kann.

Ich danke Euch allen für Eure rege Beteiligung und für die Vorschläge. Jetzt verschwinde ich erst mal für 4 Tage nach Rom und dann werde ich mich damit auseinander setzen.

Euch allen noch einen schönen Sonntag.

Gruß Jürgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:19 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz