Visual C++/CLI 2010 Wechsel zwischen 2 Formen - und zurück!



  • EDIT
    Herausgefunden das es NICHT C++ sondern C++/CLI Code ist. VIELEN DANK AN MICROSOFT für 2 Tage verschwendete Zeit dank beklopptem Visual C++ 2010 Compiler. Thread bitte verlegen ins C++/CLI Forum oder löschen.

    Dies ist mein erster Post, vorher habe ich natürlich kurz in die "stickies" bei den Tutorials http://www.c-plusplus.net/forum/134700 geguckt, allerdings wird
    der Erste momentan "überarbeitet",
    der Zweite ist auf japanisch,
    der Dritte lässt sich nicht laden und
    der Vierte ist auf Norwegisch (?) ...

    Ich habe festgestellt, dass ich am schnellsten durch try-and-error lerne, wobei mir allerdings noch einige Grundvoraussetzungen im Verständnis mit headern, cpps, resx usw. fehlen. Also eiere ich momentan etwas herum und bau mir erstmal ein eigenes "Lernprogramm", in dem ich meine Lernerfolge festhalten, zusammenfassen und (viel, viel, viel) später sortieren und in ein Tutorial verwandeln möchte.

    Momentan versuche ich, zwei Formen zu haben (Form1 und Form2) und mit Hilfe zweier buttons (in jeder Form einer) zwischen beiden hin und her zu schalten. Form1 wird hierbei beim Programmstart aufgerufen, beim Druck auf den button versteckt und Form 2 wird gestartet. Beide sind in der Hauptanwendung included.

    Hauptanwendung

    // Gathering.cpp: Hauptprojektdatei.
    
    #include "stdafx.h"
    #include "Form1.h"
    #include "Form2.h"
    
    using namespace Gathering;
    
    [STAThreadAttribute]
    int main(array<System::String ^> ^args)
    {
    	// Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    	Application::EnableVisualStyles();
    	Application::SetCompatibleTextRenderingDefault(false); 
    
    	// Hauptfenster erstellen und ausführen
    	Application::Run(gcnew Form1());
    
    	return 0;
    }
    

    Form1.h

    #pragma once
    #include "Form2.h"
    
    ......(hier werden die ganzen Elemente der Form1 untergebracht)
    
    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
    
    this->Hide(); 
    /* An dieser Stelle möchte ich mit einer if Abfrage abfangen, falls Form2 schon existiert -> Wie würde diese Abfrage heissen? soetwas wie if Form2 existiert schon {} else { Form2^ _frm2 = gcnew Form2(); } */
    Form2^ _frm2 = gcnew Form2(); 
    _frm2->ShowDialog();
    
    		 }
    };
    }
    

    und Form2

    #pragma once
    #include "Form1.h"
    .....
    
    #pragma endregion
    	private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    
    				 			 				 this->Hide(); 
    
    _frm1->ShowDialog();// Problem: Form1 nichtdeklarierter Benutzer. Obwohl sowohl hier als auch in der Hauptanwendung included.
    
    			 }
    	};
    }
    

    Also, hier meine Fragen:

    Seltsamerweise funktioniert das nur, solange ich von Form 1 Form 2 aufrufen möchte. sobald ich von Form2 aus wieder Form1 aufrufen möchte, mit der Zeile
    _frm1->ShowDialog();
    sagt mir der Compiler, _frm1 wäre nicht deklariert.

    Wie lautet die Abfrage "existiert Form2 schon?" für meinen if-catcher ?

    Wo genau (und warum) muss ich Form1 und Form2 #includen, in der Form1.h /Form2.h ODer / und dem Hauptprogramm?

    Ich möchte in Form2 das Programm mit einem weiteren button beenden können, mit "Return 0;" geht´s aber nicht ...

    Code für den Exit button in Form2:

    private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) {
    				 return 0;
    			 }
    

    error C2562: 'Gathering::Form2::button2_Click': 'void'-Funktion gibt einen Wert zurück

    So, das wars erstmal 😃 bedenket, ich bin ein vollnuub, habe Vorgestern mit C++ angefangen.

    P.S. Bitte keine Antworten bezüglich "nimm doch lieber Java / Wurstbrot / Keks." Solche Antworten nehmen nur Platz weg, meine Meinung, davon habe ich in den letzten 2 Tagen schon genug gesehen, und davon lern ich nix. (Mit-Kopf-Durch-die-C-Wand-Will)



  • Du lernst seit 2 Tagen C++ und du möchtest dein eigenes Tutorial schreiben?
    Was hast du davor für sprachen gelernt?

    Wenn keine dann musst du unbedingt ein Tutorial LESEN!!!!



  • Ja, wieso denn? Es gibt viele, die mit 2 Tagen C++-Erfahrung Tutorials geschrieben haben. Deswegen ist es auch so eine schlechte Idee, C++ aus Tutorials lernen zu wollen.

    Das Zauberwort heißt Buch. Aber nicht von Galileo Computing; da tummeln sich Autoren, die mit 2 Tagen C++-Erfahrung der Meinung waren, ganze Bücher über das Thema verfassen zu können.



  • Ganz davon abgesehen, dass du nicht C++, sondern C++/CLI (das ist keine Haarspalterei, sondern eine andere Sprache) programmierst.



  • @ unreg #1

    Ich zitiere mich selbst:
    "... (viel, viel, viel) später ..."
    Wer lesen kann ist klar im Vorteil. Bitte woanders trollen.

    @ unreg #2

    Viiielen Dank für die zahlreichen tollen Buchvorschläge. Die waren mir eine groooße Hilfe. (Ironiealarm.)

    @ Michael

    Hmmm, ok, woher weiß ich wann ich was programmiere? Beim Erstellen eines neuen Projekts mit Visual C++ 2010 stand da jedenfalls nirgendwo was von C++/CLI ...



  • Wenn du wirklich( und ernsthaft) C++ programmieren willst, dann ist ein Buch wirklich nicht schlecht! Aber das musst du selber wissen.

    Wenn du ein neues Projekt machst, dann stehen unter Projekt-Typen ein paar Sachen wie: WIN 32, CLR, Allgemein (is bei 2008 so).
    Dort nimmst du nicht CLR, sondern WIN 32 und dann Konsolenanwendung.

    Zu deinem Hauptproblem kann ich dir leider nicht helfen, weil ich der Sprache C++/CLI nicht mächtig bin.

    gruß
    syntax





  • Keks an syntax! 😃

    Dann mach ich mich ma gleich an die Arbeit alles von vorn zu machen ^^
    Zu blöd das se da net ne Warnung am Anfang geben das in nem C++ Compiler noch andere Programmiersprachen untergebracht sind ... und standardmäßig alle anzeigen ... ich dachte das wär nur ne Ansammlung verschiedener Projektarten ...

    Wie schließe ich den Thread ? Soll ich ihn schließen?

    @ dot

    YO. GENAU das iss mir passiert. hat mich 2 Tage gekostet. Aber mein Papierkorb freut sich ja, wenn ich für ihn arbeite.

    Egal ^^

    Edit:
    O...K... So wie ich das sehe, gibt es in VISUAL C++ 2010 KEINE Möglichkeit, Buttons usw per drag and drop in ein Codelement einzubauen, ohne zu C++/CLI zu wechseln ? Was zum Henker iss denn dann so VISUAL am Visual C++ ? Nicht, das ich was dagegen habe, selber die Koordinaten von buttons durch die Gegend zu ziehen, aber ... SOWEIT war ich vor 12 Jahren schon mal! Keinerlei Improvement ???



  • Danke für den Keks. 😃

    Du kannst beim Erstellen im CLR Windows-Forms-Anwendung auswählen. Da sollte meines Wissens drag and Drop realisierbar sein. (köpft mich nicht wenns nicht so ist)
    Aber wie gesagt, ist kein C++ sondern C++/CLI.

    gruß
    syntax



  • Wer Benutzeroberflächen bauen will, der soll das bitte mit C# machen. C++/CLI ist dafür jedenfalls völlig ungeeignet.
    Wer C++ lernen will, der soll sich bitte erstmal von UI Kram fernhalten und die Sprache lernen. Irgendwelche Buttons irgendwo mit Drag and Drop irgendwie rumzuziehen hat mit C++ jedenfalls nichts zu tun.



  • Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ (auch C++0x und C++11) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Der TE versucht doch ein reines C++ Programm zu erstellen? Er will ja garkein C++/CLI.

    Hallo cyberleon,

    Zu blöd das se da net ne Warnung am Anfang geben das in nem C++ Compiler noch andere Programmiersprachen untergebracht sind

    Das ist so nicht ganz richtig. Im großen und ganzen ist es das Visual Studio, das unterstützt mehrere Projekttypen, sowie eine große Auswahl an Programmiersprachen. Was Microsoft dazu gebracht hat C++/CLI und C++ in das selbe Teilprogramm vom Visual Studio Express zu stecken ist mir zwar ein Rätseln, jedoch nicht ganz falsch.



  • cyberleon schrieb:

    O...K... So wie ich das sehe, gibt es in VISUAL C++ 2010 KEINE Möglichkeit, Buttons usw per drag and drop in ein Codelement einzubauen, ohne zu C++/CLI zu wechseln ? Was zum Henker iss denn dann so VISUAL am Visual C++ ?

    1. Der C++ Standard kennt keine Buttons, keine Benutzeroberfläche und kein Drag&Drop.
    2. Es gibt eine Unmenge möglicher UI-Bibliotheken für C++, einige bezogen auf eine Plattform, einige wiederum Plattformübergreifens.
    3. Jede C++ UI-Bibliothek verfolgt einen anderen Ansatz, und man sollte dafür erst einmal die Sprache C++ einigermaßen sicher beherrschen. Ja, man fängt mit C++ tatsächlich mit Konsolenprogrammen an (hat auch den Vorteil das man sich wirklich auf den Kern der Sprache konzentriert.

    In anderen Sprachen, in der eine oder mehrere UI-Bibliotheken zum Sprachstandard gehört, mag es anders aussehen, aber selbst da ist es nicht verkehrt sich zuerst auf die eigentliche Sprache zu konzentrieren.

    Wenn du in "C++", oder C++ "nahen" Sprachen Oberflächen zusammen klicken willst, kannst du dich unter anderen an die folgenden Begeben:
    * QT-Creator müsste einen Designer haben (Damit wählst du das QT-Framework als Basis, was weitgehend Plattformunabhängig ist)
    * C++/CLI mit WinForms => Ist aber kein C++
    * C++ Builder mit VCL => Ist ein C++/Delphi-Mischmasch
    * Visual C++ (ab Professional) mit der MFC (MFC gilt nicht ohne Gründe als Veraltet).
    ...

    Aber mit keiner dieser Designer wirst du die Sprache wirklich lernen.


Anmelden zum Antworten