Delphi-PRAXiS
Seite 1 von 2  1 2      

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/)
-   -   Delphi dynamisch auf Componenten zugreifen (https://www.delphipraxis.net/135888-dynamisch-auf-componenten-zugreifen.html)

jangbu 19. Jun 2009 14:01


dynamisch auf Componenten zugreifen
 
Hallo,

möchte um nicht alle Label_1 bis Label_99 einzeln initialisieren zu müssen, dies über eine Schleife machen. Wie kann ich die Objekte Label_1 bis Label_99 dynamisch ansprechen?

Delphi-Quellcode:
for i:=1 to 99
  label + '_' + IntToStr(i).Text = 'blabla';

???
[edit=mkinzler]Delphi-Tag eingefügt Mfg, mkinzler[/edit]

Die Muhkuh 19. Jun 2009 14:02

Re: dynamisch auf Componenten zugreifen
 
Hi,

schau Dir mal Delphi-Referenz durchsuchenFindComponent an.

DeddyH 19. Jun 2009 14:04

Re: dynamisch auf Componenten zugreifen
 
Bevor wieder jemand mit FindComponent kommt: pack Dir die Labels in ein Array oder eine TObjectList und arbeite das/die dann ab. Wenn Du eine TObjectList verwendest, denke aber daran, OwnsObjects auf false zu setzen.

[edit] Zu spät :? [/edit]

jangbu 19. Jun 2009 14:15

Re: dynamisch auf Componenten zugreifen
 
danke!

jangub

Andreas L. 19. Jun 2009 14:22

Re: dynamisch auf Componenten zugreifen
 
Falls die Labels alle auf der selben Komponente liegen (Form, Panel, etc.) gehts auch so:

Delphi-Quellcode:
var
  i: Integer;
begin
  for i := 0 to ComponentCount -1 do
  begin
    if Components[i] is TLabel then
      (components[i] as TLabel).Text := 'blubb';
  end;
end;

shmia 19. Jun 2009 14:29

Re: dynamisch auf Componenten zugreifen
 
Stehen für den Benutzer wichtige Informationen in den Labels?
Falls ja, dann nimm TEdit mit ReadOnly=True anstelle der Labels.

Vorteil für den Benutzer: er kann Texte markieren und kopieren.

Es gibt leider so viele ungeschickte Programme, die z.B. Hypherlinks, Seriennummern, usw anzeigen und der arme Benutzer muss alles abschreiben. :wall:
Bestes Beispiel ist das Infofenster des Internet Explorer.

DeddyH 19. Jun 2009 14:31

Re: dynamisch auf Componenten zugreifen
 
Zitat:

Zitat von Andreas L.
Falls die Labels alle auf der selben Komponente liegen (Form, Panel, etc.) gehts auch so:

Delphi-Quellcode:
var
  i: Integer;
begin
  for i := 0 to ComponentCount -1 do
  begin
    if Components[i] is TLabel then
      (components[i] as TLabel).Text := 'blubb';
  end;
end;

Wenn Du den Typ schon mit "is" geprüft hast, kannst Du Dir das anschließende "as" sparen. Und der Code geht in Ordnung, wenn es alle Labels betrifft, ansonsten geht das so nicht.

Andreas L. 19. Jun 2009 15:02

Re: dynamisch auf Componenten zugreifen
 
Zitat:

Zitat von DeddyH
Wenn Du den Typ schon mit "is" geprüft hast, kannst Du Dir das anschließende "as" sparen.

Du meinst ich sollte dann einen Hardcast TLabel(Components[i]) machen? Wo ist da der Unterschied?

DeddyH 19. Jun 2009 15:16

Re: dynamisch auf Componenten zugreifen
 
Ich will nicht die Hand dafür ins Feuer legen, aber m.W.n. prüft as erneut mit is den Typ ab und wirft im Fehlerfall eine Exception. Ein harter Typecast ist daher vermutlich etwas schneller.

mirage228 19. Jun 2009 15:18

Re: dynamisch auf Componenten zugreifen
 
Zitat:

Zitat von DeddyH
Ich will nicht die Hand dafür ins Feuer legen, aber m.W.n. prüft as erneut mit is den Typ ab und wirft im Fehlerfall eine Exception. Ein harter Typecast ist daher vermutlich etwas schneller.

Kannst Du ruhig tun. So ists nämlich ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 Uhr.
Seite 1 von 2  1 2      

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