![]() |
TPageControl -> EInvalidOperation -> kein übergeord. F
Hallo!
Bitte entschuldigt die blöde Frage, aber ich hab keine Ahnung, wa sich falsch gemacht habe! Ich will zur Laufzeit eine Seite in ein TPageControl einfügen, das ich ebenso zur Laufzeit erzeuge. Dabei kriege ich in der Methode AddPage die genannte Exception. Der Debugger beleibt auf der Anweisung "PageControl = self stehen".
Delphi-Quellcode:
Wer kann mir sagen, was ich in meiner betriebsblindheit übersehen habe? :wall:
type
TDialogRegisterPage = class (TTabSheet) constructor Create(AOwner: TComponent); end; TDialogRegister = class(TPageControl) constructor Create(AOwner: TComponent); procedure AddPage(const AName: String); end; constructor TDialogRegisterPage.Create(AOwner: TComponent); begin inherited Create(AOwner); FControl := TAnyControl.Create(self); FControl.Parent := self; FControl.Align := alClient; end; procedure TDialogRegister.AddPage(const AName: String); var Page: TDialogRegisterPage; begin with TDialogRegisterPage.Create(self) do begin Caption := AName; PropKinds := APropKinds; Parent := self; PageControl := self; end; end; constructor TDialogRegister.Create(AOwner: TComponent); begin inherited Create(AOwner); AddPage('Titel1'); AddPage('Titel2'); end; ----------------------------- type TForm1 = class(TForm) ... procedure FormCreate(Sender: TObject); ... private MyDlgRegisters: TDialogRegister; public end; procedure TForm1.FormCreate(Sender: TObject); begin MyDlgRegisters := TDialogRegister.Create(self); with MyDlgRegisters do begin Left := 0; Top := 0; Width := 185; Height := 289; end; MyDlgRegisters.Parent := self; end; |
Re: TPageControl -> EInvalidOperation -> kein übergeor
Und wenn Du die beiden AddPage-Aufrufe in die Loaded-Methode des TDialogRegister verschiebst?
|
Re: TPageControl -> EInvalidOperation -> kein übergeor
self ist zum Zeitpunkt des Create noch nicht vorhanden (noch kein Handle). Somit schlägt das im Create fehl:
Delphi-Quellcode:
Das kannst du frühestens in CreateWnd tun.
constructor TDialogRegister.Create(AOwner: TComponent);
begin inherited Create(AOwner); AddPage('Titel1'); // <- geht das schief AddPage('Titel2'); // <- und geht das schief end;
Delphi-Quellcode:
Gruß oki
procedure TDialogRegister.CreateWnd;
begin inherited; AddPage('Titel1'); AddPage('Titel2'); end; |
Re: TPageControl -> EInvalidOperation -> kein übergeor
Hallo,
Delphi-Quellcode:
Das self bei Parent:= self bezieht sich durch das with ja auf dein TDialogRegisterPage,
with TDialogRegisterPage.Create(self) do
begin Caption := AName; PropKinds := APropKinds; Parent := self; PageControl:= self; end; statt auf TDialogRegister. Löse das durch eine lokale Variable.
Delphi-Quellcode:
var
DialogRegisterPage: TDialogRegisterPage; begin DialogRegisterPage:= TDialogRegisterPage.Create; with DialogRegisterPage do begin Caption := AName; end; Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:07 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