Projekt mit mehreren Forms



  • Hi Leuts,
    ist es möglich in einen Projekt durch einen Button, von der einen in eine andere Form zu springen, die dann also z.B. anders aufgebaut ist?
    Wenn ja, könnte mir mal die Funktion bzw. den Befehl dafür schreiben?

    Schon mal danke,

    TheExecut0r



  • Hallo

    Ja, das geht. Du must den Header der aufzurufenden Form in der Code-Datei der aufrufenden Forms includen und dann die Methoden Show() oder ShowModal() der aufzurufenden Form benutzen.

    bis bald
    akari



  • Kannst du mir mal ein Beispiel machen? Wäre echt nett!



  • Hallo

    nehmen wir mal an, du willst Form2 aus Form1 in dem OnClick von TForm1::Button1 aus aufrufen :

    #include "Form2.h" // Include hinzufügen
    ...
    void __fastcall TForm1::OnButton1Click(TObject *Sender)
    {
      Form2->ShowModal(); // Form2 modal öffnen
      }
    

    bis bald
    akari



  • Danke!!!



  • huhu, hätte ma noch ne frage dazu...
    ich habe auch ein projekt mit mehreren forms, ich geh in eine form rein, tippe dort nen namen ein, geh raus aus der form mit

    Form1->Close();
    

    doch wenn ich wieder in die form reingehe, ist immer noch der name von letzte ma drin. wie mach ich das? gibt es da keine "new creat", oder "refresh" funktion?



  • Mach im OnActivate der 2. Form das rücksetzen der Felder!



  • Hallo

    Wenn du ein Form schließt heißt das nicht, das auch die Instanz des Forms geschlossen wird, ode die Controls ihre Eigenschaften verlieren.

    außerdem manuellen zurücksetzen kannst du auch noch jedesmal eine komplett neue Instanz anlegen:

    #include "Form2.h" // Include hinzufügen
    ...
    void __fastcall TForm1::OnButton1Click(TObject *Sender)
    {
      TForm2 *NewForm = new TForm2(NULL);
      NewForm->ShowModal(); // Form2 modal öffnen
      delete NewForm;
      }
    

    bis bald
    akari



  • akari schrieb:

    Hallo

    Wenn du ein Form schließt heißt das nicht, das auch die Instanz des Forms geschlossen wird, ode die Controls ihre Eigenschaften verlieren.

    außerdem manuellen zurücksetzen kannst du auch noch jedesmal eine komplett neue Instanz anlegen:

    #include "Form2.h" // Include hinzufügen
    ...
    void __fastcall TForm1::OnButton1Click(TObject *Sender)
    {
      TForm2 *NewForm = new TForm2(NULL);
      NewForm->ShowModal(); // Form2 modal öffnen
      delete NewForm;
      }
    

    bis bald
    akari

    Jetzt habe ich damit folgendes Problem:
    Sobald ich das alles drin habe, kann ich die Form mit einem Butten nicht mehr schließen! Die Form rückt in hintergrund, die neue form, die sich öffnen soll, öffnet sich zwar, aber ich kann dort nichts anklicken, dann muss ich wieder auf die form im hintergrund klicken & die NOCHEINMAL schließen, was schafft da abhilfe?

    mfg
    andy



  • Hallo

    Die Form rückt in hintergrund, die neue form, die sich öffnen soll, öffnet sich zwar, aber ich kann dort nichts anklicken, dann muss ich wieder auf die form im hintergrund klicken & die NOCHEINMAL schließen

    Verstehe überhaupt nicht was du da sagen willst.
    Mein Code funktioniert ausgezeichnet, es erzeugt ein modales Fenster, das erst wieder über die üblichen Windows-Methoden geschlossen werden muß, bevor die aufrufende Form/Methode fortgesetzt wird.

    bis bald
    akari



  • Ja also, ich habe sozusagen ein Hauptmenu (Form1) wenn ich dort auf Button1 klicke soll er Form2 öffnen. Ich lade dann z.B. einen Namen in ein Edit rein, so, und jetzt, wenn ich normal über den button1 auf der Form2 mit folgendem code

    Form2->Close;
    

    die Form2 verlasse & dann wieder im Hauptmenu(Form1) auf Button1 klicke, ist immer noch der Name im Button.

    So, deine funktion ist so zwar korrekt, aber ich kann dann die Form2 nicht über den button1 auf der Form2 beenden, ich muss erst ZWEIMAL oben auf das X klicken, erst dann kann ich wieder auf der Form1(Hauptmenu) den Button1 benutzen um wieder auf die Form2 zugelangen.



  • Hallo

    was lernst du draus? Wenn du in TForm2 eine Methode hast, die auf andere Eigenschaften oder Methoden von TForm2 zugreift, sollst du z.B. nicht

    Form2->Close();
    

    schreiben, sondern immer

    Close();
    

    was die kurzform für

    this->Close();
    

    ist.

    Denn du arbeitest ja nun mit verschiedenen Instanzen von TForm2, und da ist Form2 nur eine davon.

    bis bald
    akari



  • achso,na dann vielen dank!


Anmelden zum Antworten