Event OnCreate()
-
Hallo zusammen,
ich habe ein Verständisproblem wenn ich mit zwei Forms arbeite. Und zwar: Wenn ich in meinem Hauptform auf
den Button next klicke erscheit mein zweites Form, realisiert über:
Hauptform->Visible = false;
Subform->Visible = true;Das heißt also, sobald meine Applikation startet sind beide Forms aktiv. Wenn ich nun ca. 20 Forms habe, heißt
das, das 20 Forms aktiv sind??? Das ist doch extrem ressourcenlastig? Wie kann ich es realisieren, dass nur zu
Programmbeginn mein Hauptform aktiv ist und mein Subform erst über den Button next aktiv bzw erzeugt wird?Meine zweite Frage: wenn ich auf den Button back klicke, gelange ich wieder zu meinem Hauptform zurück. Realisiert über:
Subform->Close();
Hauptform->Visible = true;
Abermaliges klicken auf den Butto next soll nun wieder das Subform aktivieren, und dachte, dass ich in diesem
Fall das Event OnCreate vom Subform nutzen kann. Aber ein Memoeintrag bei OnCreate wird nicht angezeigt. Das beweist doch,
das mein Subform, obwohl ich es über ->Close() geschlossen habe nicht wieder neu kreiert wird. Ein Memoeintrag in Event OnShow
funktioniert. Kann mir jemand Klarheit schaffen?lg,
blitzgeist
-
im BCB-Menü unter Projekt -> Optionen -> Formulare kannst du einstellen welche Formulare automatisch beim Start des Programms erzeugt werden sollen und welche nicht
bei den Formularen, die du nicht automatisch erzeugst, mußt du dann das Erzeugen und Löschen selbst übernehmen, z.B beim Button-Click:
Application->CreateForm(__classid(TForm2),&Form2); // oder //TForm2 *Form2 = new TForm2(this); if (Form2->ShowModal() == mrOk) { //mach irgendwas } Form2->Release(); delete Form2;
-
Danke,
werde es gleich mal ausprobieren.
-
Also habe das jetzt so eingebunden. Wenn ich nun das Form OptionenUSB verschiebe erscheint darunter das Hauptform Anwendungswahl, obwohl ich es doch
Anwendungswahl->Visible = false; gesetzt habe. Wenn ich einen Breakpoint auf diese Codezeile setzte hält der Compiler auch nicht an. Er geht also nicht in den If-Zweig, warum?void __fastcall TAnwendungswahl::ButtonWeiterClick(TObject *Sender) { if(ListBoxAnwendung->ItemIndex == 2) { Application->CreateForm(__classid(TOptionenUSB), &OptionenUSB); OptionenUSB->Top = Anwendungswahl->Top; OptionenUSB->Left = Anwendungswahl->Left; OptionenUSB->Height = Anwendungswahl->Height; OptionenUSB->Width = Anwendungswahl->Width; if (OptionenUSB->ShowModal() == mrOk) { Anwendungswahl->Visible = false; } OptionenUSB->Release(); delete OptionenUSB; } }
...ich könnte ja jetzt einfach das Hauptform Anwendungswahl im Subform OptionenUSB auf Visible=false setzten, aber was für Kommandos könnten dann in der if Abfrage stehen?
if (OptionenUSB->ShowModal() == mrOk) { Anwendungswahl->Visible = false; //geschieht nun im anderen Form. //Was soll hier z.B. stehen? }
-
Hallo
Die Codezeile in dem ShowModal-if wird natürlich erst erreicht wenn das Modale Fenster geschlossen wird, nicht solange es noch offen ist.
bis bald
akari
-
Achso. Das erklärt ja alles.
-
Hmm...doch nicht soo ganz
Egal wie ich mein Subform schließe (OptionenUSB->Close(); oder ModalResult = mrCancel;) gelange ich nicht in diesen if-Zeig. Was meinst du mit Modales Fenster schließen?
-
Hallo
Egal wie ich mein Subform schließe (OptionenUSB->Close(); oder ModalResult = mrCancel;) gelange ich nicht in diesen if-Zeig.
Warum auch? Der Aufruf von Close() wird bei Modalen Fenstern auch nur mit mrCancel verarbeitet. Damit dürfte klar sein das eine Überprüfung auf mrOk niemals positiv ausfällt.
Was meinst du mit Modales Fenster schließen?
Du must da modale Fenster mit
ModalResult = mrOk;
schließen, dann wird auch die Bedingung erfüllt.
Wenn es dir egal ist auf welche Art ein modales Fenster geschlossen wird, dann mach eben keine Bedingung.
bis bald
akari
-
Vielen Dank akari, für deine guten Erklärungen. Man lernt eben ein Leben lang
lg,
blitzgeist