Variablen zwischen 2 Forms übergeben im Falle wenn...



  • Hi Leute,
    erstmal großes Lob an euch und das Forum. Bin Anfänger und konnte schon sehr viele Fragen durch die FAQ's etc. lösen können.

    Dieses Problem besteht bei mir dennoch:

    Ich habe ein Hauptformular und ein Nebenformular für tätigbare Einstellungen. Nun möchte ich diese Einstellungen allerdings nur übergeben, wenn der Benutzer die Schaltfläche "Speichern" klickt. Drückt er "Abbrechen" bleibt die Übergabe aus.
    Ich weiß einfach nicht wie ich da mit einer If-Anweisung weiterkommen würde. Aber vielleicht geht das ja auch anders.

    Momentaner Standord : Hauptform:

    void __fastcall Ttii::OptionenClick(TObject *Sender)
    {
    	Form2 = new TForm2(Application);
    	Form2->Show();
    
    //Hier mein Versuch
    	if (Form2->saveoptionsClick()) {
    		gamedir = Form2->gamedir;
    		sepdir = Form2->sepdir;
    		autoclose = Form2->autoclose;
    }
    }
    

    Momentaner Standort : Nebenform:

    void __fastcall TForm2::saveoptionsClick(TObject *Sender)
    {
    //Vor lauter Verzweiflung :
    
    return gamedir;
    return sepdir;
    return autoclose;	
    
    //Was natürlich nicht funktioniert
    }
    

    Alle Variablen habe ich "öffentlich" zugänglich gemacht und stellt auch kein Problem dar. Nur die Übergabe im Falle wenn, macht mir Probleme.

    Danke,
    MfG Icestar



  • Hallo

    Ich würde dir empfehlen das Nebenformular nur modal anzuzeigen, das macht die Sache viel einfacher. Dazu must zu erstmal bei dem Speicher-Button den Wert der Eigenshcfat ModalResult auf mrOK setzen. Dann brauchst du in die Aurfuf-Methode nur noch den Code

    void __fastcall Ttii::OptionenClick(TObject *Sender)
    {
      Form2 = new TForm2(Application);
      if (Form2->ShowModal() == ID_OK)
      {
        gamedir = Form2->gamedir;
        sepdir = Form2->sepdir;
        autoclose = Form2->autoclose;
      }
      delete Form2;
    }
    

    Bitte benutze für das Posten von C++ Code hier im Forum auch die C++ Tags und nicht die Code-Tags

    bis bald
    akari



  • Super Geil^^.
    Vielen Dank für die schnelle Antwort.
    Funktioniert einwandfrei.

    MfG Icestar



  • Hallo

    Übrigens noch eine Anmerkung : Du solltest dem Pointer Form2 keine manuell erstellte Instanz zuweisen, bzw. den Pointer anders nennen. Hintergrund ist das der globale Pointer Formx zu jeder Formklasse TFormx angelegt wird. Normalerweise wird diesem Pointer auch beim Programmstart eine Instanz zugewiesen.
    Diese kannst du auch ja auch gleich benutzen

    void __fastcall Ttii::OptionenClick(TObject *Sender)
    {
      if (Form2->ShowModal() == ID_OK) // Wenn die Formklasse TForm2 heißt
      {
        gamedir = Form2->gamedir;
        sepdir = Form2->sepdir;
        autoclose = Form2->autoclose;
      }
    }
    

    Willst du aber wirklich eine manuelle Instanz haben solltest du niemals die globalen Pointer benutzen sondern selber einen deklariern.
    Das führt bei dir zwar noch zu keinen Fehler, das kann sich aber bei unbedachtem Gebrauch ganz schnell ändern.

    bis bald
    akari


Anmelden zum Antworten