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/)
-   -   Delphi Fehler beim Zugriff auf Steuerlemente aus d. Konstruktor (https://www.delphipraxis.net/105728-fehler-beim-zugriff-auf-steuerlemente-aus-d-konstruktor.html)

sunny-andy 28. Dez 2007 14:23


Fehler beim Zugriff auf Steuerlemente aus d. Konstruktor
 
Hallo,

ich habe momentan einen (für mich) sehr merkwürdigen Fehler im Programm.
Ich erstelle einen Frame, in welchem ein TPageControl liegt. Dieses enthält zur Entwicklungszeit bereits 7 TabSheets.

Nach dem Erstellen des Frames möchte ich einige TabSheets unsichtbar machen:

Delphi-Quellcode:
constructor TFrameKarteikarten.Erzeugen;
begin
  inherited Create(nil);
end;

procedure TFrameKarteikarten.DeaktiviereTabs;
begin
  pcListen.Pages[0].TabVisible := false; <--- Hier tritt der Fehler auf
end;

...
FrameKarteikarten := TFrameKarteikarten.Erzeugen;
FrameKarteikarten.DeaktiviereTabs;
Er meldet eine "Out of bounds (7)"-Exception.

So nun habe ich eben ein paar Haltepunkte gesetzt, etwas herumgespielt und nun geht es doch wieder.

Der Konstruktor sieht nun so aus und der Fehler ist nun weg:
Delphi-Quellcode:
constructor TFrameKarteikarten.Erzeugen;
begin
  inherited Create(nil);
  DeaktiviereTabs;
end;
Auch wenn ich es wieder zurückändere, geht es nun ohne Exception.
Kann es sein, dass im Konstruktor das TabSheet noch nicht ganz erzeugt worden ist? Verhält sich der Compiler anders, wenn ich im Konstruktor auf Eigenschaften eines Steuerelements zugreife?
Ich verstehe jedenfalls nicht, woran es liegt...

Vielleicht hat ja jemand einen Tipp :nerd:

sunny-andy 28. Dez 2007 14:29

Re: Fehler beim Zugriff auf Steuerlemente aus d. Konstruktor
 
Also da es jetzt ging, wollte ich die Prozedur erweitern:
Delphi-Quellcode:
procedure TFrameKarteikarten.DeaktiviereTabs;
begin
  pcListen.Pages[0].TabVisible := false; <--- Hier tritt der Fehler auf
  pcListen.Pages[3].TabVisible := false;
end;
Und auf einmal ist der Fehler wieder da, wo er vorher war :|
"List index out of bounds (7)"...

Muetze1 28. Dez 2007 15:39

Re: Fehler beim Zugriff auf Steuerlemente aus d. Konstruktor
 
Da der angegebene Code nur auf Index 0 und 3 zugreift und die Fehlermeldung aber von Index 7 spricht, muss es eine andere Code Stelle sein. Vermutlich löst das TabVisible z.B. OnChange aus, wo anderer Code von dir steht, der genau den Fehler verursacht. Debugger nutzen und nachschauen...

hoika 28. Dez 2007 15:53

Re: Fehler beim Zugriff auf Steuerlemente aus d. Konstruktor
 
Hallo,

bei "normalen" Komponenten darf man erst in der Loaded-Prozedur
auf Subkomponenten zugreifen.


Heiko


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