![]() |
Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Hallo
Ich erzeuge zur Laufzeit einige Komponenten und das funktioniert auch prima. Leider kann ich aber auf den Inhalt nicht zugreifen. Beim Compilieren ist fertig. Die erzeugte Komponenten wird als 'ungültiger Bezeichner' erkannt! Kann mir jemand weiterhelfen :?: Besten Dank zum Voraus Gruss Armin
Delphi-Quellcode:
// Erzeugen der Komponente
procedure TForm1.CreateEdit(name: String; links, oben, breite, hoehe: Integer); begin if TEdit(FindComponent(name)) = nil then // Feld nicht vorhanden begin edi_feld := TEdit.Create(Self); with edi_feld do begin Parent := Self; Name := name; AutoSize := False; SetBounds(links, oben, breite, hoehe) end; abstand := links + breite + 3 // Position aktualisieren end end; ... // Zugriff auf die erzeugte Komponente - Hier meckert der Compiler ! if TEdit(FindComponent(name)) <> nil then Stringvariable := 'name der komponente'.Text; |
Re: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Das geht so nicht!
Code:
Nenn die übergebene Variable um z.B. AName! Also
Name := name;
Code:
Grüsse!
Name := AName;
|
Re: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Hallo mischerr
Danke für Deine rasche Hilfe. Ich musste nur noch den Zugriff ändern, dann funktionierte es. :cheers: Gibt es eine elegantere Variante?
Delphi-Quellcode:
mfg Armin
if TEdit(FindComponent(AName)) <> nil then Stringvariable := TEdit(FindComponent(AName)).Text;
|
AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Klar! Auf with verzichten. Diese unübersichtliche, tippfaule, nebulöse Programmierung bringt nur Nachteile. Na gut, man spart sich ein paar Tastaturanschläge - legt die beim Debuggen locker mehrfach drauf. :warn:
|
AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
stimmt nicht! es ist laut Delphi Hilfe effizienter. Aber dann sparsam und nur in performancekritischen Schleifen einsetzen. Der Debugger mag das nicht D2009). Außerdem wird es mit zunehmender Länge der Blöcke schwer verständlich.
|
AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Zitat:
|
AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Aus der Delphi 2009 Hilfe: Deklarationen und Anweisungen
Zitat:
|
AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Ich lese daraus nicht, dass with effizienter sein soll als der Verzicht darauf.
|
AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Nun, wir haben es hier mit einer Kollison des
![]() Sowohl das dynamisch angelegte TEdit als auch das übergeordnete TForm besitzen teilweise die gleichen Properties (Name, Parent, Autosize, SetBounds). Durch die Verwendung von With kann der Programmierer nicht mehr zuverlässig unterscheiden, welches Objekt konkret angesprochen wird. Sobald aber nur die geringste Unsicherheit besteht, sollte man von With die Finger lassen. Der Gewinn von Zeit im Mikrosekundenbereich ist es einfach nicht wert. |
AW: Auf Inhalt zur Laufzeit erzeugter Komponenten zugreifen
Von With-statements sollte man bekanntlich grundsätzlich die Finger lassen.
Von dem Beispiel aus der Delphi 2009 Hilfe kriegt man ja ganz blutige Augen... Aua! Ausserdem sieht oben im Code die Verwendung von FindComponent() noch ein wenig nach einer zweiten Sollbruchstelle aus. Normalerweise sollte man Objekte über vernünftige Objekt-Referenzen verwalten. Zur Laufzeit mit Objekt-Namen herumzuhantieren sieht immer etwas amateurhaft aus. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:30 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 by Thomas Breitkreuz