Probleme mit SelectNextPage und TPageControl
-
Hi,
ich habe mir ein TPageControl aufs Formulargelegt und lasse mir von der Anwendung automatisch neue TabSheets anlegen, die jeweils mit einem Frame gefüllt werden.
for (int i = 1; i < anz; i++) { TTabSheet *Sheet = new TTabSheet(this); Sheet->Caption = values->Strings[i]; Sheet->PageControl = PageControl1; TMyFrame *frame = new TMyFrame(this, Input, i); frame->Name = "Frame" + AnsiString(i); frame->Parent = Sheet; }
Dies macht soweit keine Probleme und läuft einwandfrei. Nun habe ich auf dem Frame ein Weiter Button, damit automatisch das nächste TabSheet angewählt wird.
void __fastcall TMyFrame::BWeiterClick(TObject *Sender) { Form2->PageControl1->SelectNextPage(true); }
Kompilieren lässt sich fehlerfrei und wenn ich nun den Weiterbutton nutze, gibt es eine EAccessViolation Zugriffsverletzung. Der Compiler bleibt dann bei der Zeile mit dem SelectNextPage stehen.
Wenn ich von Hand ein PageControl mit einigen TabSheets anlege funktioniert SelectNextPage einwandfrei. Wieso nur bei mir nicht?
Ich verwende den BCB 2006, falls dies für die Antwort wichtig ist.
Phil
-
Hallo
Da das Form und das Frame in zwei verschiedenen Unist stehen müßen, hast du sicher keinen gültigen Zeiger auf die wirkliche Form-Instanz.
Wie sieht den in deinem Programm die Verbindung von Frame zu Form aus?Vermutlich hast du einen einfachen include, und benutzt den Standard-Zeiger für TForm2. Da sehe ich nur ein Problem, wenn du die eigentliche Instanz von Form2 zur Laufzeit erstellst, und somit der Zeiger Form2 auf keine gültige Instanz zeigt.
Du solltest besser dem Frame noch einen Pointer auf das Form oder besser noch nur auf das PageControl geben. Damit ersparst du dir Umwege und hast ein sauberes Design.
bis bald
akari
-
Hi,
vielen Dank. Du hast das Problem genau richtig erkannt. Da wäre ich nie drauf gekommen.
Habe das PageControl dem Frame mit übergeben und nun läufts einwandfrei
Phil