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/)
-   -   FindComponent auf TabSheet (https://www.delphipraxis.net/181619-findcomponent-auf-tabsheet.html)

creehawk 29. Aug 2014 14:15

FindComponent auf TabSheet
 
Moin Moin,

auch nach längerem Suche hier und anderswo ist es mir nicht gelungen, einen funktionierende Abfrage auf den Inhalt einer zur Laufzeit erzeugten Combobox oder auch Editbox auf einem ebenfalls zur Laufzeit erzeugten TabSheet eines zur Designzeit erzeugten PageControls zu produzieren. Folgender Code läuft problemslos durch:

Code:
procedure TMain.CreateCitySheetsClick(Sender: TObject);
var
  I:Integer;
  CitiesPageControlCount: integer;
  NewPage: TTabSheet;
  NewCitySelectCombo: TComboBox;
begin
  CitiesPageControlCount := CitiesPageControl.PageCount + 1;
  NewPage := TTabSheet.Create(Main.CitiesPageControl);
  NewPage.Parent := Main.CitiesPageControl;
  NewPage.PageControl := Main.CitiesPageControl;
  NewPage.Name := 'CityNumber' + IntToStr(CitiesPageControlCount);
  NewPage.Caption := 'Stadt Nr.' + IntToStr(CitiesPageControlCount);

  NewCitySelectCombo := TComboBox.Create(NewPage);
  NewCitySelectCombo.Parent := NewPage;
  NewCitySelectCombo.Name := 'CitySelectCombo' + IntToStr(CitiesPageControlCount);
  NewCitySelectCombo.Left := 8;
  NewCitySelectCombo.Top := 4;
  NewCitySelectCombo.Visible := True;
NewCitySelectCombo.Items.LoadFromFile(ProgrammPfad+'\Stadtliste.txt');
end;
In der Form Main auf dem Pagecontrol CitiesPageControl wird bei jedem Buttonclick eine neues Tabsheet mit der Combobox mit dem korrektem Namen erzeugt. Aber jede Form von Abfrage oder Zuweisung auf den Inhalt beispielsweise - .Text - der Combo bringt nichts.

Code:
  TComboBox(Main.CitiesPageControl.FindComponent('CitySelectCombo1')).Text := 'Hamburg';
als eins von mehreren Versuchen zum Beispiel funktioniert nicht. Natürlich ist eine Framelösung auch möglich, aber wieso geht dieser Mist nicht?

Was fehlt da?

creehawk

DeddyH 29. Aug 2014 14:29

AW: FindComponent auf TabSheet
 
Weil Du als Owner nicht das PageControl, sondern das dynamisch erzeugte TabSheet angegeben hast.
Zitat:

Delphi-Quellcode:
NewCitySelectCombo := TComboBox.Create(NewPage);

Wie ist es denn so?
Delphi-Quellcode:
NewCitySelectCombo := TComboBox.Create(CitiesPageControl);

himitsu 29. Aug 2014 15:00

AW: FindComponent auf TabSheet
 
x.FindComponent such nach Komponenten, welche x als Owner besitzen.
x.FindControl such nach Komponenten, welche x als Parent besitzen.

Also, wie Detlef es schon richtig sagte, kannst du nur das finden, wovon CitiesPageControl der Besitzer ist.



Und warum wird da überall auf die Variable Main zugegriffen? (Self oder weglassen)

creehawk 29. Aug 2014 15:01

AW: FindComponent auf TabSheet
 
Heiliger BimBam.

Ich habe nun wirklich jede Antwort zum Thema im Netz gelesen, aber glaubst du DAS habe ich gesehen....


Ich danke vielfältig.

creehawk

Ups, äh - MAIN - , weiß ich auch nicht, Angewohnheit seit Jahrhunderten....

himitsu 29. Aug 2014 15:08

AW: FindComponent auf TabSheet
 
Es wäre vielleicht nicht schlecht gewesen, wenn du den Fehler nicht im ersten Post wegeditiert hättest.

Wemnn nochmal jemand soein Problem hat und diesen Thread findet, dann sieht er ja nicht mehr was falsch war.

creehawk 29. Aug 2014 15:41

AW: FindComponent auf TabSheet
 
Äh, den Fehler habe ich nicht wegeditiert, ist immer noch da....

Und die Lösung steht sehr übersichtlich da drunter : Zitat=Fehler und anschließend die Lösung.

creehawk

himitsu 29. Aug 2014 16:41

AW: FindComponent auf TabSheet
 
Dann hatte ich wohl auf's falsche Create geguckt. :oops:

Ach ja, Willkommen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:23 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