Multi-Form. Aber wie?



  • Hallo miteinander.

    Ich bin an einem keinen Projekt, welches irgendwie immer etwas komplizierter wird, und dabei stellen sich neue Fragen:

    1. Wie öffne ich eine Form von einer anderen aus? Ich habe bis jetzt diesen Beitrag gefunden, der genau die Frage beantwortet:
      http://www.c-plusplus.net/forum/viewtopic-var-t-is-167591.html
      Aber wie definiere ich jetzt Form2? Irgendwo muss ich doch sagen, wie diese Form aussehen soll und was alles enthalten ist? Kann man das ebenfalls "bequem" über die grafische lösung von Microsoft Visual C++ Express Edition machen?

    Wenn ich eine Form habe, die einzig und alleine Fehlermeldungen anzeigen soll, wie kann ich von der main-Form den Fehler übergeben?

    Ein Einstellungs-Fenster. Ähnlich wie Frage 2 aber nur in die andere Richtung: Wie bekomme ich die Settings zur main-Form? Mit return, Pointern oder gibts da eine einfache Möglichkeit.

    Besten Dank für die Hilfe
    MFG
    P51D



  • Moin,

    guck Dir hier mal "Zwei Forms / Teil 1" und Teil 2 an...

    http://www.rb-softarticle.com/Schulungsvideos.aspx

    Der Rest ist dann aber auch easy.

    Gruß,

    Doug_HH



  • Hallo

    Besten Dank für die wunderbare Antwort, das finde ich jetzt einmal eine brauchbare Erklährung.

    Doug_HH schrieb:

    Moin,
    Der Rest ist dann aber auch easy.

    Mhm... aber leider tue ich mich jetzt hier ein bischen schwer. Variablen, Strukturen und dergleichen kann ich ja icht verwenden, da das Include schon vor diesen deklarationen steht. Des weiteren kann ich ja auch nicht auf diese Bedienelemente der Einstellungen-Form zugreifen, da diese sobald sie geschlossen ist, nicht mehr existieren.

    Währe wirklich froh, wenn jemand mir einen Tipp geben kann.

    MFG
    P51D



  • Ich habe eine Art "Main.cpp", die Anfangs aufgerufen wird, in der kann ich dann variablen definieren. In einem Header kannst du sie deklarieren:

    Main.cpp

    #include "def.h"
    
    tausch variable;
    
    //Main
    //...
    

    def.h

    #ifndef _def
    #define _def
    
    struct tausch
    {
        int i;
        char text[88];
    };
    
    extern tausch variable;
    
    #endif
    

    form1.h

    #include "def.h"
    
    //...
    

    form2.h

    #include "def.h"
    #include "form1.h"
    
    //...
    


  • ok, ich habe mir das etwas angesehen und versucht.
    Das Resultat war:

    Color Control.obj : error LNK2005: "double col_intensity" (?col_intensity@@$$Q3NA) ist bereits in fenster_settings.obj definiert.

    die Variable ist so definiert: glob_var.h

    #ifndef _glob_variablen_
    #define _glob_variablen_ 
    
    extern double col_intensity = 1;
    
    #endif
    

    die Main-Form sieht so aus: form1.h

    #include	"glob_var.h"
    #include	"fenster_settings.h"
    
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    		 		unsigned char value = 134;
    				value = System::Convert::ToByte( col_intensity * value );
    				label1->Text = System::Convert::ToString(value);
    				label2->Text = System::Convert::ToString(col_intensity);
    		 }
    

    Das Einstellungsfenster so: fenster_settings.h

    #include	"glob_var.h"
    
    private: System::Void button1_Click(System::Object^  sender, System::EventArgs^  e) {
    			 col_intensity = System::Convert::ToDouble(Color_intensity->Value);
    //			 label1->Text = System::Convert::ToString(col_intensity);
    		 }
    

    Wo mache ich hier den Fehler??

    Und irgendetwas geht mir von der Logik der includes noch nicht auf:
    Bei form1.h, der Hauptform ist es logisch, aber wieso muss ich bei fenster_settings.h nochmals einen include setzen?
    include ist ja ein "Platzhalter" für das in der zu includierenden Datei und fenster_settings.h wird ja in form1.h ebenfalls NACHTRÄGLICH unterhalb von glob_var.h included. Also müsste doch in fenster_settings.h der Inhalt von glob_var.h schon bekannt sein?!
    Ich programmiere jetzt schon ~3 Jahre C, 2 Jahre PHP und ~1 Jahr C++ (CLI) aber irgenwie scheint mir, als hätte ich in den ersten 2 Stunden des programmierens etwas verschlafen.

    Besten Dank für die Unterstützung
    MFG
    P51D



  • Hi,

    statt

    extern double col_intensity = 1;
    
    extern double col_intensity;
    

    zu verwenden. Im Header darfst du jedenfalls nicht initialisieren 😉

    und sicherheitshalber vor den Includes

    #pragma once
    

    Und irgendetwas geht mir von der Logik der includes noch nicht auf:
    Bei form1.h, der Hauptform ist es logisch, aber wieso muss ich bei fenster_settings.h nochmals einen include setzen?
    include ist ja ein "Platzhalter" für das in der zu includierenden Datei und fenster_settings.h wird ja in form1.h ebenfalls NACHTRÄGLICH unterhalb von glob_var.h included. Also müsste doch in fenster_settings.h der Inhalt von glob_var.h schon bekannt sein?!

    Hast Recht 😃
    Einmal reicht eigentlich, also in der Hauptdatei darfst du "glob_var.h" weglassen.
    Hatte anfangs nur eine Form, deshalb diese Doppelung 🤡

    LG,
    Dark



  • mhm, übernommen und angepassat, aber die Fehlermeldung ist nach wie vor die selbe.

    ??
    Wenn ich bei fenster_settings.h "#include "glob_var.h" auskommentiere und col_intensity nicht verwendet wird, habe ich keine Fehlermeldung.
    Verwende ich diese Variable aber dann kriege ich eine Fehlermeldung betreffen nich deklarierten Variablen..?!?

    #include "glob_var.h"
    #include "fenster_settings.h"
    
    // glob_var ist hier bekannt
    

    wieso ist glob_var.h aber nicht in fenster_settings.h bekannt, wenn diese nicht extra noch dort eingebunden wird??

    MFG
    P51D



  • C/C++ Code:
    #include "glob_var.h"
    #include "fenster_settings.h"

    // glob_var ist hier bekannt

    wieso ist glob_var.h aber nicht in fenster_settings.h bekannt, wenn diese nicht extra noch dort eingebunden wird??

    Das Include für "glob_ver.h" wird aber durch diesen Code nicht in "fenster_setting.h" genutzt...

    Du musst "glob_ver.h" in "fenster_setting.h" einbinden.
    Wenn du dann in "main.h" nur "fenster_setting.h" einbindest, DANN ist dadurch "glob_var.h" auch in "main.h" eingebunden.

    Die Fehlermeldung

    Color Control.obj : error LNK2005: "double col_intensity" (?col_intensity@@$$Q3NA) ist bereits in fenster_settings.obj definiert.
    

    bekommst du immer noch ?



  • DarkShadow44 schrieb:

    Die Fehlermeldung

    Color Control.obj : error LNK2005: "double col_intensity" (?col_intensity@@$$Q3NA) ist bereits in fenster_settings.obj definiert.
    

    bekommst du immer noch ?

    Ja. Ich habe aber keine Ahnung wieso, da ich niergends sonst diese Variable deklariere und in den Forms höchsten "col_intensity = " habe.



  • Ich würde Dir empfehlen es über Properties zu machen, zwecks Datenkapselung.

    Hab Dir mal ein kleines Beispiel gemacht.
    Hoffe Du blickst da durch, sonst einfach fragen.
    Wenn ich Dich richtig verstanden habe, sollte das Dein Problem lösen...

    www.rb-softarticle.com/errWindow.rar

    Gruß

    Doug_HH


Anmelden zum Antworten