Öffnen eines Fensters nach Buttonbetätigung



  • Hallo Communityleute!

    Eigentlich ist es eine recht simple Frage:
    Ich habe da ein Dialogfeld, darin habe ich einen Button erstellt (das alles in Visual C++ 2008 Express Edidion). Nun möchte ich, dass sich ein weiteres Fenster öffnet mit beispielsweise einem "Hallo Welt"-Text drin, wenn ich auf den Button klicke. Wie kann ich das machen?

    Danke schonmal für alle Antworten,
    Mr. Fossey



  • du machst einen rechtsklick auf dein Projekt und wählst -> Hinzufügen -> Neues Element->Windows-Form

    in dieser Klasse kannst du dann im Editor deinen "Hello World" Text einfügen

    Jetzt wählst du wieder dein Haupfenster aus, und machst einen Rechtsklick auf deinen Button, welcher den Dialog anzeigen soll
    -> Eigenschaften..
    am rechten Bildschirmrand müsste eine Menüleiste erscheinen. Da klickst du auf den Blitz und suchst dir aus,
    in welchem Fall dein "Hello World" Fenster angezeigt werden soll....
    (am Sinnvollsten ist wahrscheinlich "Click")

    Wenn du einen Doppelklick auf das leere Feld nach dem entprechenden Ereignis machst, wird automatisch ein Event Handler
    für dieses Ereignis erstellt, und VS springt zu dieser Methode.

    In dieser Methode musst du jetzt nur noch ein neues Objekt von deiner "Hello World" Windows Form Klasse anlegen

    Hello_World_Klasse _hello_world = new Hello_World_Klasse(); // Instanz der Klasse erzeugen
    _hello_world().Show();           // Erzeugt einen nicht modalen Dialog
    _hello_world().ShowDialog();     // Erzeugt einen modalen Dialog
    

    Edit: hab grad erst gesehen, dass du ja mit c++ arbeitest...

    Hello_World_Klasse ^ _hello_world = gcnew Hello_World_Klasse();
    _hello_world->ShowDialog();
    


  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) 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.



  • Ich nehme mal an, du wolltest, dass ich bei deinem Code einen Teil mit meinen Klassennamen etc. ersetze, aber es funktioniert irgendwie nicht (ob ich was ändere oder nicht). Was genau meinst du mit Hello_World_Klasse und _hello_world?



  • nun ja... du willst ja wenn ich dich richtig verstanden habe im Hauptfenster auf einen Button klicken, und dann soll ein neues Fenster angezeigt werden, in dem z.B "Hello World" steht....

    dieses neue Fenster definierst du in einer Klasse die eine Unterklasse von Form ist.
    Das macht aber Visual Studio ganz automatisch, wenn du, wie ichs oben beschrieben habe ein Element vom Typ Windows-Form zu deinem Projekt hinzufügst.
    Beim Hinzufügen musst du einen Namen für das Element angeben -> dieser Name ist gleichzeitig dein Klassen-name.

    In dem Codeschnipsel wäre der Name des Elements "Hello_World_Klasse"

    der Name "_hello_world" wiederum ist der Name der Instanz die von der Klasse erzeugt wird und damit frei wählbar.

    ist genau das selbe, wie wenn du eine Variable definiert

    int _value;                                //int ist der Typ, _value der Name
    Hello_World_Klasse _hello_world;           // Hello_World_Klasse ist der Typ, _hello_world der Name
    _hello_world = gcnew Hello_World_Klasse(); // Aufruf des leeren Konstruktors
    _hello_world.show();                       //bzw. showDialog()
    


  • Der Debugger sagt mir, er kenne die Klasse, die ich angelegt habe, nicht. Da liegt es nahe, zu schauen, ob es die Klasse wirklich gibt - und das tut es!

    Vielleicht habe ich da etwas falsch verstanden. Du sagtest:

    zitroneneis schrieb:

    du machst einen rechtsklick auf dein Projekt und wählst -> Hinzufügen -> Neues Element->Windows-Form
    [/cpp]

    Dieses Verzeichnis scheint es nicht zu geben, dh. nur Hinzufügen -> Klasse -> Windows Form. Sollte aber ebenfalls richtig sein.

    Vielleicht bringen dich (und mich) die Fehlermeldungen des Debuggers weiter (HelloWorldDialog ist die Klasse, _hello_world habe ich belassen, da, wie du sagtest, man die Bezeichnung auslesen kann):

    (87) error C2065: 'HelloWorldDialog': nichtdeklarierter Bezeichner
    (87) error C2146: Syntaxfehler: Fehlendes ';' vor Bezeichner '_hello_world'
    (87) error C2065: '_hello_world': nichtdeklarierter Bezeichner
    (88) error C2065: '_hello_world': nichtdeklarierter Bezeichner
    (88) error C2061: Syntaxfehler: Bezeichner 'HelloWorldDialog'
    (89) error C2065: '_hello_world': nichtdeklarierter Bezeichner
    (89) error C2228: Links von ".show" muss sich eine Klasse/Struktur/Union befinden.



  • Header includiert ? Grundlagenkapitel im Grundlagenbuch gelesen ?



  • Knuddlbaer schrieb:

    Header includiert ? Grundlagenkapitel im Grundlagenbuch gelesen ?

    Danke! Nun gibt es nur noch einen Fehler: Es kann die Headerdatei nicht finden. Wie mache ich das?

    Was ich geschrieben habe:

    #include <HelloWorldDialog.h>
    

    Richtig so?

    Nebenbemerkung:
    Ich bin ein Hilfloser Anfänger was MFC anbelangt. Mit allgemeiner C++-Programmierung bin ich grad mittendrin. Alles, was ich will, ist mir einen einfachsten Einblick ins dialogfeld- und buttonbasierte Programmieren zu gewähren, habt also geduld mit mir 😞



  • Versuch mal

    #include "HelloWorldDialog.h"
    

    Der Compiler sucht (soweit ich mich entsinne) an verschiedenen Orten bei <> und "".



  • "HelloWorldDialog.h": No such file or directory



  • Mr. Fossey schrieb:

    "HelloWorldDialog.h": No such file or directory

    ich hab einfach ne Klasse hinzugefügt windows form
    dann oben
    #include "Form2.h"

    [cpp]
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    
    		Form2 f2;
    		f2.ShowDialog();				 
    			 }
    	};[/cpp]
    

    ging



  • Ich weiss nicht genau, woran es vorher lag, aber jetzt funktioniert es plötzlich 😕

    Danke vielmals an alle, die sich die Zeit genommen haben, hier einen Beitrag zu schreiben!


Anmelden zum Antworten