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, Form2Ich 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); }