Formular wechseln



  • Guten Tag;
    ich würde in einem Programm gerne zwischen mehreren Formularen wechseln, also z.B. in Form1 auf einen Button drücken, so dass Form1 verschwindet und Form2 erscheint. Und dann von Form2 zurück zu Form1...

    Das wechseln von Form1 zu Form2 funktioniert...

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			this->Visible = false;
    			Form2^ f2 = gcnew Form2(); 
    			f2->ShowDialog(); 
    			 }
    

    ...ebenso wie das Wechseln von Form2 zu Form3, aber wenn ich versuch von Form2 zurück zu Form1 oder von Form3 zurück zu Form2 zu wechseln, bekomme ich immer einen Fehler beim "erstellen" der Form, ich nehme an das liegt daran, dass die Form schon existiert.
    Gibt es eine einfache Möglichkeit die Form zurück zu wechseln, oder muss man eine Funktion schreiben, die Form1->Visible auf true setzt?

    Ich hoffe das ihr mir helfen könnt und bedanke mich jetzt schon einmal für eure Hilfe.

    Lukas



  • Ruf doch einfach mal "Close" auf...



  • Erstmal vielen Dank für die schnelle Antwort, aber könntest du mir das etwas genauer und vielleicht an Hand eines Code-Beispiels erklären?



  • Kann mir denn niemand weiter helfen?



  • Ich hab das Problem jetzt gelöst, für die die es interessiert poste ich hier mal den Code rein...

    Form1:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    		Form2^ f2 = gcnew Form2(); 
    		this->Visible = false;
    		f2->ShowDialog();
    		this->Visible = true;
    			 }
    

    Form2:

    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    
    			this->Close();
    
    			 }
    


  • Ist ja logisch.
    Bei ShowDialog(); wartet die auferende Form, bis die aufgerufene wieder zu ist.

    Ps: D kannst auch einfach Hide(); und Show(); anstatt Visible = ... verwenden
    🙂



  • Hallo,
    schonmal vielen Dank für die Hilfe. Durch diesen Thread bin ich schon etwas weitergkommen. Ich habe allerdings folgendes Problem.

    Mein zweites Formular heisst add_ring.h und ist auch schon reichlich mit TextBoxen Sonstigem versehen. Wenn ich nun das ganze per Klick auf den Button in Form1 öffne öffnet sich leider lediglich ein leeres Formular.

    Form^ add_ring = gcnew Form();
    				 add_ring->ShowDialog();
    

    Bitte steinigt mich nicht, wenn was grundlegen falsch ist. Muss für eine Arbeit im Studium was programmieren und hab schon lange ncihts mehr gemacht. (2006)

    Gruß Jannis



  • Statt "Form" mußt du schon den richtigen Klassen-Namen deiner Form eintragen...



  • Jayhead schrieb:

    Form^ add_ring = gcnew Form();
    add_ring->ShowDialog();
    

    Schau...
    Das ist wie bei jeder anderen Instanzierung (<-- heißt das so?? - egal.) auch

    <Type>^ <name> = gcnew <Type>();
    

    So. Dein Typ ist jetzt die Klasse, die von der Form erbt. Form brauchst du also nicht nocheinmal zu erwähnen, sondern nur deine Klasse. Als Namen kannst du jetzt alles x-Beliebige verwenden. Am besten nicht add_ring, da das ja der Klassen-Name ist. Also eher sowas wie:

    add_ring^ NeuerRing = new add_ring();
    NeuerRing.ShowDialog();
    //bzw:
    NeuerRing.Show();
    

Anmelden zum Antworten