WinForms Schulprojekt Shop Programm



  • Ich wusste dass das kommt, war aber nicht meine Frage. Wir lernen bei uns in der Schule ausschließlich C++ und unser Arbeitsauftrag war eine WinForms Anwendung zu kreieren. C++/CLI ist nicht direkt etwas ganz anderes, sondern eine Erweiterung von C++ - aber back to topic!

    Ich vermute du kennst dich aus, also hilf mir doch bitte? 🙂



  • Aleeexx schrieb:

    Wir lernen bei uns in der Schule ausschließlich C++ und unser Arbeitsauftrag war eine WinForms Anwendung zu kreieren.

    Das ist in C++ schlicht und einfach nicht möglich.

    Aleeexx schrieb:

    C++/CLI ist nicht direkt etwas ganz anderes, sondern eine Erweiterung von C++ - aber back to topic!

    Ganz egal wie man es auch sieht, Fakt ist, dass C++/CLI für das was du vorhast ungeeignet ist. Ich finde es wichtig, an dieser Stelle festzuhalten, dass jeder, der von euch verlangt, eine Windows Forms Anwendung in C++/CLI zu erstellen, den Sinn von C++/CLI missverstanden hat. C++/CLI ist nicht, war nie und wird nie für sowas gedacht sein, die Tatsache dass es überhaupt möglich ist, ist lediglich eine unvermeidbare Folge dessen, wofür C++/CLI wirklich gedacht ist, nämlich Managed Unmanaged Interop Szenarien. Microsoft selbst rät offiziell davon ab C++/CLI für die Entwicklung von Benutzeroberflächen zu verwenden und es ist kein Zufall, dass Visual Studio 2012 nichtmal mehr eine Projektvorlage dafür enthält...

    Wenn euer Lehrer auch nach Konfrontation mit dieser Tatsache weiterhin auf C++/CLI besteht, bleibt dir wohl leider nix anderes übrig, als einfach zu tun, was von euch verlangt wird. In dem Fall solltest du dir aber zumindest für deine persönlich Zukunft merken, dass a) C++/CLI nicht C++ ist und b) man für sowas in der realen Welt z.B. C# verwenden würde und nicht C++/CLI.

    Aleeexx schrieb:

    Nun zu meiner Fragestellung: Ich habe, nach dem Login, mein Mainwindow.
    http://img717.imageshack.us/img717/7435/14327497.png
    Dort will ich per Button-Klick (Ja, das links sind 3 Buttons) auf Shop erstellen, dass rechts im Fenster folgendes erscheint:
    http://img542.imageshack.us/img542/3975/yo2f.png
    Bei Klick auf 'Erstellen' soll alles wieder verschwinden. Das Ganze soll natürlich auch bei den anderen Buttons geschehen! (werden voraussichtlich noch welche dazu kommen.) Wie setze ich das am besten um? Ist es überhaupt möglich?

    Klar ist es möglich. Ich würde wohl für den Dialog ein eigenes UserControl bauen.

    Aleeexx schrieb:

    Eine weitere Frage ist, wie bzw. wo kann ich eigene Variablen deklarieren?! Wenn ich die so deklariere, wie sonst auch immer passiert folgendes:
    http://img585.imageshack.us/img585/4237/yo3e.png

    Das Problem ist wohl, dass der Datentyp CString an dieser Stelle nicht bekannt ist...



  • dot schrieb:

    Klar ist es möglich. Ich würde wohl für den Dialog ein eigenes UserControl bauen.

    Kannst du mir das ein wenig näher erläutern?

    dot schrieb:

    Das Problem ist wohl, dass der Datentyp CString an dieser Stelle nicht bekannt ist...

    Oh Gott ja, wie dumm von mir. Welche Klasse wähle ich am besten für strings bei C++/CLI? Und wie deklariere ich diese dann?



  • Aleeexx schrieb:

    Oh Gott ja, wie dumm von mir. Welche Klasse wähle ich am besten für strings bei C++/CLI? Und wie deklariere ich diese dann?

    System::String^ myString;
    


  • Super, das klappt schon mal - danke!

    Wäre klasse, wenn mir noch jemand das mit dem UserControl erklären könnte.



  • Dazu sollte sich auf google eigentlich genug finden lassen. Die meiste Information zu Windows Forms ist natürlich an C# gerichtet, weil C++/CLI ja wie gesagt nicht für sowas gedacht ist. Sollte sich aber problemlos übertragen lassen...



  • Soweit war ich auch schon, habe bisher folgendes:

    private: System::Void ShopNeu_Click(System::Object^  sender, System::EventArgs^  e)
    		 {
    			 UserControl^ uc = gcnew UserControl();
    
    			 uc->CreateControl();
    			 uc->Show();
    			 uc->SetBounds(150, 150, 150, 150);
    			 Color Farbe = Color::FromName("Black");
    			 uc->BackColor = Farbe;
    		 }
    

    Kam keine Fehlermeldung, passiert ist allerdings auch nichts. Wäre nett, wenn du mir das ein wenig erklären könntest - ein Vollprofi bin ich nämlich leider nicht. 😢



  • Was genau hast du denn erwartet, das dieser Code machen würde?



  • Habe so eben gesehen, dass es eine weitaus bessere Methode gibt - habe also jetzt eine Create_Shop_Control.h und Create_Shop_Control.cpp. Wie bekomme ich das in mein uStore_main Fenster jetzt an die gewünschte Stelle?



  • Ich denk das kann man nur beantworten, wenn du uns erstmal sagst, was genau diese "weitaus bessere Möglichkeit" ist, an der du dich versuchen willst... 😉

    Aber ich vermute mal, du hast nun ein Create_Shop_Control Steuerelement gemacht!? Das wäre dann genau das, was ich vorgeschlagen hätte. In dem Fall musst du das Steuerelement nur noch instanzieren und auf deiner Form platzieren...



  • Oh, ja, richtig. Wir verstehen uns offensichtlich. 😉

    Ich vermute mit instanzieren meinst du folgendes:

    private: System::Void ShopNeu_Click(System::Object^  sender, System::EventArgs^  e)
    		 {
    			 Create_Shop_Control^ ShopControl = gcnew Create_Shop_Control();
    			 ShopControl->Show();
    		 }
    

    Nur bin ich entweder blind, oder es steht da tatsächlich nicht, aber wie platziere ich es an meine gewünschte Stelle?



  • Um es zu platzieren musst du es zur Controls Collection der entsprechenden Form hinzufügen... 😉



  • Gut, bin jetzt also soweit, dass es kommt, wenn ich auf den Button drücke.

    private: System::Void ShopNeu_Click(System::Object^  sender, System::EventArgs^  e)
    		 {
    			 Create_Shop_Control^ ShopControl = gcnew Create_Shop_Control();
    			 ShopControl->Location = Point(200, 70);
    			 Controls->Add(ShopControl);
    		 }
    

    Wie kann ich es jetzt allerdings via Button Klick, welcher sich in dem Control befindet, verschwinden lassen?



  • Ich würde spontan mal zwei Möglichkeiten vorschlagen: Entweder du packst den Button in das Control und gibst dem Control ein eigenes Finish Event, das eben ausgelöst wird, sobald der Benutzer der Dialog bestätigt, oder du machst den Button außerhalb des Dialoges...



  • Das Erste hab ich nicht so ganz verstanden, wie meinst du das?



  • Was meinst du mit Finish Event?



  • Gibt deinem Control ein Event, welches ausgelöst wird, wenn im Control der entsprechende Button gedrückt wird. An dieses Event kann deine Hauptform sich dann anhängen. Dem Eventhandler kannst du dann auch gleich die im Dialog gemachten Einstellungen übergeben...



  • Habe in der Klasse des UserControls bisher folgendes:

    public event EventHandler ^ OnClickAbbrechen;
    
    private: System::Void erstellenAbbrechen_Click(System::Object^  sender, System::EventArgs^  e)
    			 {
    				 OnClickAbbrechen(this, nullptr);
    			 }
    

    (Quelle: http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/74a259ad-d95d-4e05-9e65-33fc7af49d9a/)

    Allerdings kann ich ja nicht, wie die Person es da schreibt, in meinem main Fenster auf das Control klicken und das Event in der Liste auswählen, da es ja noch nicht von Anfang an existiert. Wie mache ich das in meinem Fall?
    Wie "hänge" ich also meine Hauptform dran?



  • Habs jetzt mit einem Zeiger auf uStore_main und der Controls->Remove(this); Methode gelöst.

    Daher: Closed.


Anmelden zum Antworten