![]() |
FindComponent für dynamische Komponente auf dyn. Formular
Hallo Gemeinde,
hier mein 'grausiges' Problem. Ich habe ein MainForm (Form1). Von dem aus erstelle ich zur Laufzeit Form2. Auf Form2 erstelle ich eine PageControl, auf dieser 5 TabSheets und auf jedem TabSheet ein StringGrid. Wenn ich jetzt von Form1 aus versuche mit
Delphi-Quellcode:
etwas in diese StringGrids zu schreiben, kommt jedes Mal eine 'Access Violation'. Ich bin frustriert und ratlos.
(Form2.FindComponent('StringGrid' + IntToStr(x))as TStringGrid).Cells[0,0] := 'mein Text';
Hoffe mir kann geholfen werden. Danke im Voraus. |
Re: FindComponent für dynamische Komponente auf dyn. Formula
Wer ist Owner der ereugten Komponente?
|
Re: FindComponent für dynamische Komponente auf dyn. Formula
1, Wenn du schon dynamisch Formular und Komponenten erstellst dann nimm bitte vernünftige Namen. TForm1 (bzw. Form1) ist 'ne IDE-Vorgabe und sollte geändert werden. TMainForm oder TFormLoader oder ähnliches ist verständlicher und sagt im Groben aus was das Formular macht.
2, Nimm niemals bei dynamisch erstellten Formularen die von der IDE angelegte globale Variable im interface-Abschnitt. Am besten löscht du diese gleiche damit du nicht in versuchung kommst. 3, Auch für deine dynamisch erstellten Komponenten überleg dir einen besseren "Merkmechanismus" (z.B. Array of TPageControl, ...) um nicht auf die FindComponent-Methode zurückfallen zu müssen 4, Greif nicht Kreuz- & Quer- auf die verschiedenen Fomularelemente von anderen Formularen darauf zu. Definier dir Zugriffsmethoden (z. B. procedure SetGridCell(Index, x, y: Integer; const Text: String); Dein Fehler wird mit Punkt 2 zusammenhängen. |
Re: FindComponent für dynamische Komponente auf dyn. Formula
Hallo MKinzler,
Owner Form2 ist Keiner (self), Pagecontrol ist Form2, Tabsheet ist Pagecontrol und StringGrid ist Keiner (self). Mit Owner meinst du doch das hinter Create und nicht parent, oder? Sorry für meine Laiensprache. |
Re: FindComponent für dynamische Komponente auf dyn. Formula
Mit dem owner stellst du genau die Liste in den von Tcomponent (also alle die du verwendest) abgeletet Klassen her, auf die du mittels Findcomponent zugreifst.
Deswegen ist es für Findcomponent, dass du im Constrcutor auch immer den für dich gewünschten Owner angibst. Und "self" ist nicht "kein owner" (das wäre nil) sondern die Komponente in der du dich gerade befindest. |
Re: FindComponent für dynamische Komponente auf dyn. Formula
Also wenn sollte ich den nun als Owner für Form2, pagecontrol, tabsheet und stringgrid angeben, damit ich mit findcomponent zum Ziel gelange?
Oder kann man das nicht pauschal sagen? |
Re: FindComponent für dynamische Komponente auf dyn. Formula
Wenn du später Form2 befragst muss es Form2 sein
|
DP-Maintenance
Dieses Thema wurde von "Dax" von "Neuen Beitrag zur Code-Library hinzufügen" nach "VCL / WinForms / Controls" verschoben.
FF - Falsches Forum |
Re: FindComponent für dynamische Komponente auf dyn. Formula
ES FUNTIONIERT!!
Vielen Dank an MKinzler und alle anderen für eure schnellen Antworten. Tolles Forum! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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