AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TPageControl -> EInvalidOperation -> kein übergeord. Fenster
Thema durchsuchen
Ansicht
Themen-Optionen

TPageControl -> EInvalidOperation -> kein übergeord. Fenster

Ein Thema von I.A · begonnen am 22. Apr 2009 · letzter Beitrag vom 23. Apr 2009
Antwort Antwort
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#1

TPageControl -> EInvalidOperation -> kein übergeord. F

  Alt 22. Apr 2009, 16:52
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:
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;
Wer kann mir sagen, was ich in meiner betriebsblindheit übersehen habe?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

Re: TPageControl -> EInvalidOperation -> kein übergeor

  Alt 22. Apr 2009, 17:00
Und wenn Du die beiden AddPage-Aufrufe in die Loaded-Methode des TDialogRegister verschiebst?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#3

Re: TPageControl -> EInvalidOperation -> kein übergeor

  Alt 22. Apr 2009, 20:16
self ist zum Zeitpunkt des Create noch nicht vorhanden (noch kein Handle). Somit schlägt das im Create fehl:
Delphi-Quellcode:
constructor TDialogRegister.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  AddPage('Titel1'); // <- geht das schief
  AddPage('Titel2'); // <- und geht das schief
end;
Das kannst du frühestens in CreateWnd tun.

Delphi-Quellcode:
procedure TDialogRegister.CreateWnd;
begin
  inherited;
  AddPage('Titel1');
  AddPage('Titel2');
end;
Gruß oki
42
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: TPageControl -> EInvalidOperation -> kein übergeor

  Alt 23. Apr 2009, 08:29
Hallo,

Delphi-Quellcode:
with TDialogRegisterPage.Create(self) do
  begin
    Caption := AName;
    PropKinds := APropKinds;
    Parent := self;
    PageControl:= self;
  end;
Das self bei Parent:= self bezieht sich durch das with ja auf dein TDialogRegisterPage,
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 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