![]() |
Wie den Namen einer dynamisch erzeugten Komponente ermitteln
Folgende Situation:
Ich habe ein Formular auf dem ein Panel liegt. Nun wird zur Laufzeit ein DBGRid erzeugt und auf diesem Panel platziert. Anschließend wird aus einer Auswahl von an die Hundert ClientDataSets eines oder mehrere ausgewählt und mit dem DBGRid verbunden. Eigentlich benötige ich die Namen dieser ClientDataSets. Ich glaube mir wäre schon geholfen, wenn ich den Namen des DBGRid's herausfinden könnte. Hat jemand eine Idee, wie ich das eine oder das andere bewerkstelligen kann? |
Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
Hi,
der Name einer Komponente wird im Form-Designer der IDE automatisch vorbelegt - und nur da. Hast du denn bei der dynamischen Erzeugung deiner Komponenten auch einen Namen vergeben? Das ist recht ungewöhnlich. Im Normalfall identifizierst du deine dynamischen Komponenten auf andere Weise. Ganz allgemein findest du jede Komponente über die Methode FindChildControl(name) oder du suchst rekursiv in der Eigenschaft Controls eines Component-Containers (z.B. deine Form). Grüße vom marabu |
Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
Habe jetzt folgenden Lösungsansatz:
Zunächst mal vorweg: Ich habe ein Panel mit Namen „pnlList“. Darauf wird zur Laufzeit unter anderem das besagte dbGrid dynamisch platziert. Ich habe mich dann langsam vorgetastet und festgestellt, daß zur Laufzeit auf „pnlList“ eine Komponente[34] liegt – eine Form – und auf dieser wiederum mein dbGrid. Das dbGrid ist dann Komponente[22]. Nun hat ein dbGrid ja normalerweise die Eigenschaft „DataSource“. Wenn ich aber versuche auf diese Eigenschaft zuzugreifen meldet bereits der Compiler Bedenken an:
Delphi-Quellcode:
[Fehler] Main.pas(1856): E2029 Bezeichner erwartet, aber '(' gefunden
dsIrgendwas := pnlList.Components[34].(Components[22]). DataSource;
Delphi-Quellcode:
[Fehler] Main.pas(1856): E2003 Undefinierter Bezeichner: 'TDbGrid'
dsIrgendwas := pnlList.Components[34].TDbGrid(Components[22]).DataSource;
Delphi-Quellcode:
[Fehler] Main.pas(1856): E2096 Methodenbezeichner erwartet
dsIrgendwas := pnlList.Components[34].Components[22] as TDBGrid.DataSource;
Delphi-Quellcode:
[Fehler] Main.pas(1856): E2029 Bezeichner erwartet, aber '(' gefunden
dsIrgendwas := pnlList.Components[34].(Components[22] as TDBGrid).DataSource;
Was mache ich denn falsch? |
Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
Die benötigten Klassen von dynamisch zu erstellenden Komponenten musst Du schon von Hause aus in die uses-Klausel aufnehmen.
Gruß Igotcha |
Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
Die Klasse DBGrid wird eingebunden.
|
Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
Hallo,
wenn das wirklich so ist, dass du ein DGrid auf einer Form platziert hast, und diese Form zur Laufzeit auf das Panel pnlList klebst, dann ist der Zugriff auf die DataSource folgendermaßen:
Delphi-Quellcode:
marabu
var
ds: TDataSource; grid: TDBGrid; frm: TDeineForm; begin frm := pnlList.Components[34] as TDeineForm; grid := frm.Components[22] as TDBGrid; ds := grid.DataSource; end; |
Re: Wie den Namen einer dynamisch erzeugten Komponente ermit
Das funzt soweit.
Danke schön. Jetzt muß ich nur noch sehen, ob mich das weiterbringt.... :gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:52 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