WindowsForm mit einander "verlinken"



  • Hey, ich habe eine WindowsFormApplication mit 3 Forms. Diese sollen sich über einen Weiter bzw Zurück Button steuern lassen.
    Mein Problem ist das sich die includes rekursiv aufrufen. Ich habe schon mit

    #pragma once
    

    probiert sowie mit

    //Form1.h
    
    #ifndef FORM2_H
    #define FORM2_H
    
    #include"Form2.h"
    
    //code
    
    #endif
    

    probiert.

    Ich muss
    in Form1, Form2 includieren
    in Form2, Form1 und Form3
    in Form3, Form2

    Ich hoffe ihr könnt mir helfen!

    MFG



  • Setze Forwarddeklarationen und trenne die Definition von der Deklaration.

    Die Header werden sich dank der Include Guards sicherlich nicht rekursiv inkludieren. Vielmehr dürfte ständig etwas unbekannt sein.

    Ahja, zu überlegen wäre eventuell noch ob Du für das Zurück überhaupt den exakten Typ wissen musst. Eventuell reicht ja die Basisklasse Form aus.



  • ich hab jetzt eine Headerfile Includes.h

    class Form1;
    class Form2;
    class Form3;
    

    die ich dann in allen drei Forms einbinde

    #pragma once
    #include"Includes.h"
    
    //code
    

    die Forms sind aber immer noch unbekannt. Kannst du mal bitte ein Bsp posten.

    MFG



  • Kann mir bitte jemand helfen!

    Auch wenn ich in der Includes.h

    #include "Form1.h"
    #include "Form2.h"
    #include "Form3.h"
    

    und dann in allen drei Forms die Inlcude.h einbinde

    #pragma once
    #include"Includes.h"
    
    //code
    

    Form1.h

    // code
    Form2^ open = gcnew Form2();
    open->ShowDialog();
    //code
    

    bekomm ich Fehler wie diesen hier

    Form1.h(199) : error C2065: 'Form2' : undeclared identifier

    bitte helft mir!

    MFG



  • Was Du da treibst hat auch nichts mit forward declaration zu tun.

    Du musst(!) im ersten Schritt die Daten zwischen Deklaration und Definition trennen.

    Form2.h

    namespace Forms {
    
    	ref class Form1;
    
    	public ref class Form2 : public System::Windows::Forms::Form
    	{
    		Form1 ^ frm;
    
    [...]
    
    			private void doForm1(Form1 ^ frm);
    }
    

    Form2.cpp

    #include "StdAfx.h"
    #include "Form2.h"
    
    namespace Forms
    {
    	private void Form2::doForm1(Form1 ^ frm)
    	{		
    	}
    
    }
    

    http://www.google.de/search?q=c%2B%2B+forward+declaration

    Und wenn Du die Form nur mit den Methoden verwendest, die in der Basisklasse vorkommen, kannst Du auch einfach Form als Klasse einsetzen.



  • Sorry aber das versteh ich nicht ganz. Ich hab in meiner Form1.h ein Klick Event (Weiter Button) der soll die 2 Form aufrufen und das steht auch in der Form1.h

    private: System::Void next1_Click(System::Object^  sender, System::EventArgs^  e) {				
            Form2^ frm = gcnew Form2();
    	    frm->ShowDialog();
    	    Form1::Hide();
    }
    

    ich habe es auch mit deinem Bsp versucht.

    namespace Arbeitgeberdarlehen{
    
        ref class Form2;
    
        public ref class Form1 : public System::Windows::Forms::Form
        {
            Form2 ^ frm;
    
            private:
                     void doForm2(Form2 ^ frm);
    }
    

Anmelden zum Antworten