2010-06-21 5 views
0

Hey les gars, je suis tout nouveau à Visual C++, mais pas C++. J'ai des problèmes en essayant de comprendre comment montrer/cacher des formes. Disons que j'ai un formulaire Form1 et un autre formulaire FormulaireFormulaire. Dans un bouton cliquez sur la fonction dans Form1.h J'ai le code:Comment afficher et masquer des formulaires dans Visual C++?

Form1::Hide(); 
TestForm^ form = gcnew TestForm(); 
form->Show(); 

Et ça fonctionne bien. Je clique sur le bouton, et Form1 disparaît et TestForm apparaît. Mais si je fais la même chose dans TestForm.h (juste en changeant quels formulaires sont configurés pour apparaître/disparaître) je reçois une pléthore d'erreurs de compilateur dans Form1.h (qui a l'habitude de fonctionner) et TestForm.h

Form1.cpp 
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(86): error C2065: 'Form1' : undeclared identifier 
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(86): error C2065: 'form' : undeclared identifier 
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(86): error C2061: syntax error : identifier 'Form1' 
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(87): error C2065: 'form' : undeclared identifier 
c:\users\alex\documents\visual studio 2010\projects\test\test\TestForm.h(87): error C2227: left of '->Show' must point to class/struct/union/generic type 
      type is ''unknown-type'' 
    TestForm.cpp 
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(103): error C2065: 'TestForm' : undeclared identifier 
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(103): error C2065: 'form' : undeclared identifier 
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(103): error C2061: syntax error : identifier 'TestForm' 
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(104): error C2065: 'form' : undeclared identifier 
c:\users\alex\documents\visual studio 2010\projects\test\test\Form1.h(104): error C2227: left of '->Show' must point to class/struct/union/generic type 
      type is ''unknown-type'' 
+0

Je recommande vraiment d'utiliser C# dans le cas de .net et même des formes de fenêtres. – Andrey

+0

J'ai beaucoup de code C++ que je préférerais ne pas réécrire, donc C# n'est pas vraiment une option. –

Répondre

2

Le problème est probablement dû à l'ordre dans lequel vous incluez les en-têtes dans les fichiers .cpp. Dans le cas d'origine, lorsque vous travailliez dans Form1.cpp, "TestForm" était un type connu avant Form1.h était inclus. Dès que vous changez les fichiers d'en-tête, votre méthode appelle, ce n'est plus le cas.

Je recommande de déplacer vos gestionnaires d'événements (les fonctions de clic sur le bouton) vers vos fichiers .cpp. Vos fichiers .cpp peuvent inclure les deux en-têtes, et le compilateur trouvera les définitions de formulaire, avec leurs méthodes, de manière appropriée, quel que soit l'ordre dans lequel vous incluez les en-têtes.

+0

Merci Reed! C'était une chose que j'avais envisagée et essayée, mais qui avait des problèmes avec la syntaxe. Dans le fichier .h, la fonction est déclarée comme "private: System :: Void button1_Click (System :: Object^sender, System :: EventArgs^e);". Dans le fichier .cpp, j'ai essayé "System :: Void TestForm :: button1_Click (Système :: Objet^expéditeur, System :: EventArgs^e) {this-> Hide();}" mais j'ai reçu l'erreur "TestForm. cpp (5): erreur C2653: 'TestForm': n'est pas un nom de classe ou d'espace de noms "et" TestForm.cpp (7): erreur C2355: 'this': ne peut être référencé que dans des fonctions membres non statiques " –

+0

@Alex : Veillez à mettre en place les espaces de noms ou à l'inclure dans un bloc d'espace de noms. Cela devrait fonctionner si vous faites cela. –

+0

Merci beaucoup, ça l'a réparé! –

Questions connexes