Ganz, ganz blöde Frage zu Formularen



  • Hi zusammen,

    ich verwende Visual Studio .NET und arbeite mit C++ (nicht als MFC-Anwendung).
    Ich suche jetzt schon ein paar Tage, finde aber nicht den richtigen Dreh:
    ich habe zwei Formulare erzeugt, Form1 und Form2
    Habe demzufolge auch die Dateien Form1.h, Form1.cpp, Form2.h, Form2.cpp
    Jetzt möchte ich gerne mit einem Klick auf einen Button, der vorhanden ist, zu Form2 wechseln und umgekehrt.
    An welcher Stelle muss ich die beiden Formulare jeweils einbinden, damit die dem anderen Formular jeweils bekannt sind.
    Danach sollte es doch kein Problem mehr sein, einfach mit Form2->Show(), bzw. Form1->Show() die Formulare jeweils aufzurufen, oder?

    Danke
    Manfred



  • Hi zusammen,

    ist es eigentlich so schwer, in verständlicher Form darzustellen, wie man ein Formular, welches man ganz normal mit der Toolbox erstellt hat, einfach aus einem zwieten Formular heraus aufruft??

    Ich probiere das jetzt schon seit mehreren TAgen, in keinem Forum bekomme ich eine Antwort, mit der ich was anfangen kann, dass was hier der FAQ steht, ist für mich keine Erklärung, denn genau daran happert es.
    Ich habe Form1 und Form2, egal wo ich die .h-Dateien include, er sagt mir immer, er kennt eines der Formulare nicht, obwohl er mir, wenn ich den Quellcode eingebe, sobald ich den Prog-Namen eingebe, z.B. Formular mit zwei Doppelpunkten, dann gibt er mir zur Auswahl, Form1 und Form2, sobald ich die auswähle und dann kompliliere, sagt er mir, Form2 gehört nicht dazu.
    Was muss ich denn noch tun, damit diese Sch**** endlich funktioniert?????

    Ich kann mich noch daran erinnern, in VB6 und in Delphi war das popeleinfach und hier in C++ lese und suche ich mir einen Wolf und es funzt einfach nicht.

    So schön die anderen Dinge auch sind, das kann doch nicht so schwer sein, oder??

    Herzliche Grüße
    Manfred



  • Hi,

    hatte in meinen Überlegungen einen ziemlichen Denkfehler, der sich jetzt erledigt hat.

    Gruß
    Manfred



  • vielen Dank, dass Du allen, die das Problem auch haben, erklärt hast, wie es geht 😉

    Gruß, Angel



  • Angelpopangel schrieb:

    vielen Dank, dass Du allen, die das Problem auch haben, erklärt hast, wie es geht 😉

    Gruß, Angel

    so... bin jetzt auch registriert.
    Ich meine nur: Ich bin auch GENAU bei diesem Problem hängen geblieben.
    Bitte erklär mir, was mir keine Ressource erklären konnte... wie geht das?



  • Hi,

    mein Denkfehler war der, dass ich versucht, habe, jedes Formular oder besser jeder .h-Datei bei der anderen einzubinden, weil die sich sonst nicht kennen.

    Ich wollte schließlich, dass die Formulare sich gegenseitig aufrufen können.
    Aber es ist so, dass ich das zweite Formular mit
    #include "Form2.h"
    in der ersten Zeile von Form1.h einbinde und dann das zeite Formular aufrufe:

    Form* Form2 = new MeinProjekt::Form2();
    this->Hide();
    Form2->ShowDialog();
    this->Show();
    

    Mit this-Hide() verstecke ich das aktuelle Formular und rufe mit Form2->ShowDialog()
    das neue Formular auf.
    Bei Form2->Show() kann man zwischen den beiden Forms hin- und herschalten, solange man das erste bicht versteckt. bei ShowDialog() ist es geblockt.

    Wenn Du noch FRagen hast, melde Dich einfach.

    Herzliche Grüße
    Manfred



  • perfekt, vielen Dank...
    Ich hatte auch das Problem, dass ich die .h-Datei meines 2. Forms nicht in der .h-Datei des Mainforms deklariert hatte.
    Puh, 2 Tage Sucherei vorbei 🙂 Du hast meinen heutigen Tag gerettet.

    Ich hab am Samstag mein "VC++ 2003 std"-Paket bekommen und bin fast verzweifelt, weil ich keine Fenster aufrufen konnte.
    Dabei bin ich nicht wirklich unbeleckt, was Programmierung angeht.

    Ich verstehe aber absolut nicht, warum im Formsdesigner der Code für Button-Click-Aktionen in der Header-Datei und nicht in der CPP-Datei eingetragen wird... naja, ich muss wohl noch viel Lernen 🙂

    Gruß, Angel



  • Jep,

    ich hatte auch nicht so ganz verinerlicht, dass bei Schliessen des zweiten Formulars sofort eine Rückkehr zum ersten Formular erfolgt, ich habe insgesamt vier Tage damit verbracht, in verschiedenen Foren eine Lösung zu finden 😉

    Aber so ist das Leben: mühsam ernährt sich das Eichhörnchen;-)

    Herzliche Grüße aus dem verregneten Ostfriesland
    Manfred



  • 🙂
    Jetzt muss ich nur noch rausfinden, wie ich die Ressourcen wieder freigebe.
    Jedesmal, wenn ich auf meinen "About"-Button klicke, wird ja eine neue Instanz des Fensters generiert.
    Naja, vielleicht sollte ich eher mal schauen, dass ich die Fensterinstanz beim Programmstart ein mal erstelle und nicht, wenn ich auf den Button drücke 🙂

    Na... aber ich bin schonmal froh, dass ich überhaupt ein Fenster öffnen kann... hab schon an meinem Verstand gezweifelt 🙂

    Gruß, Angel



  • Hi,
    ich würde es so machen, dass ich eine globale Variable als Zeiger nehme, die auf 1 steht, wenn das Fenster schon besteht.

    Herzliche Grüße
    Manfred



  • Das ist eine gute Idee. Aber ich glaube, dass man sowas prinzipiell direkt beim Start macht, oder? Also bei der Initialisierung.
    Aber das ist als Workaround schonmal n guter Ansatz.

    Gruß, Angel



  • Hmmm... ich habe gerade was ausprobiert.
    Wenn ich in der Form2-Klasse, also der cpp-Datei eine Main-Funktion einbaue, dann gibt das Programm den Speicher des geschlossenen gerade erstellten und wieder geschlossenen Formulars wieder frei. Ist ja eigentlich auch klar, weil das 2. Form korrekt beendet wird.
    Also einfach ein

    int main (void)
    {
    }
    

    einbauen und schon werden die Ressourcen des Fensters wieder freigegeben nach der Schließung.
    Hoffe, ich erzähle jetzt keinen Unfug, aber so habe ich es erlebt 🙂
    Vielleicht ist es ja interessant.

    Gruß, Angel

    EDIT: Bitte wieder vergessen... das stimmt so nicht... jetzt gibt's Gemeckere wegen zweier main-funktionen... tja... ich hätte das Projekt versuchsweise komplett neu compilieren sollen.... sehr eigenartig, dass es erst funktionierte


Log in to reply