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


Log in to reply