none
Formen wechsel RRS feed

  • Frage

  • Hallo,

     

    ich benutze VS08 und würde gerne von form1 in Form 2 sprinegn.

    Wenn ich diesen code verwende:

    Form1::Hide ();
    Konsole^ NeueForm = gcnew Konsole(Pfadbox->Text);
    NeueForm->ShowDialog();
    

    und dan Form2 über das Beenden X in der rechten oberen ecke schließe läuft das programm noch wie kann ich das unterbinden???

    oder gibt es eine Möglichkeit Form1 zu beenden und form2 trozdem aufzurufen???

     

    LG >Fakre<

    Samstag, 11. Juni 2011 10:06

Antworten

  • Du müsstest im Destructor von deiner Form2 ("Konsole") die Form1 schließen. Damit du von Form2 auf Form1 zugreifen kannst, musst du die sogenannte Vorwärtsdeklaration verwenden. Folgende Code-Schnipsel sollten helfen:

    ref class Form1; 
    
    namespace Meinnamespace {
    
    public ref class Form2 : public System::Windows::Forms::Form
    {
     private: Form1^ form1; //Ein Objekt von Form1 erstellen
    	
     public: Form2(void) //Standardkonstruktor
      {
      InitializeComponent();
      }
    	public: Form2(Form1^ f) //Konstruktor der einen Zeiger auf ein Form1 Objekt übernimmt
      {
      this->form1 = f; //den Zeiger auf das eigene form1 Objekt übergeben
      InitializeComponent();
      }
     protected: ~Form2()
      {
      if (components)
       {
       delete components;
       }
      form1->Close(); //das eigene form1 Objekt schließen, welches gleichzeitig das globale Form1 Objekt ist
      }
     ...
    


    Das sollte funktionieren. Musst nur noch beim Aufruf / Erstellen deiner Form2 auch den neuen Kontruktor benutzen.

    Form2^ NeueForm = gcnew Form2(this);
    
    


     

    Dienstag, 14. Juni 2011 10:15

Alle Antworten

  • Du müsstest im Destructor von deiner Form2 ("Konsole") die Form1 schließen. Damit du von Form2 auf Form1 zugreifen kannst, musst du die sogenannte Vorwärtsdeklaration verwenden. Folgende Code-Schnipsel sollten helfen:

    ref class Form1; 
    
    namespace Meinnamespace {
    
    public ref class Form2 : public System::Windows::Forms::Form
    {
     private: Form1^ form1; //Ein Objekt von Form1 erstellen
    	
     public: Form2(void) //Standardkonstruktor
      {
      InitializeComponent();
      }
    	public: Form2(Form1^ f) //Konstruktor der einen Zeiger auf ein Form1 Objekt übernimmt
      {
      this->form1 = f; //den Zeiger auf das eigene form1 Objekt übergeben
      InitializeComponent();
      }
     protected: ~Form2()
      {
      if (components)
       {
       delete components;
       }
      form1->Close(); //das eigene form1 Objekt schließen, welches gleichzeitig das globale Form1 Objekt ist
      }
     ...
    


    Das sollte funktionieren. Musst nur noch beim Aufruf / Erstellen deiner Form2 auch den neuen Kontruktor benutzen.

    Form2^ NeueForm = gcnew Form2(this);
    
    


     

    Dienstag, 14. Juni 2011 10:15
  • Änder mal Form1::Hide() in Form1::Close() und schreib das unter die beiden anderen Zeilen!

     

    MFG

    developer1800

    Dienstag, 14. Juni 2011 16:11