Dumme Frage... Wie Variable in anderer Form bearbeiten



  • Hi, möchte gerne in einem neuen Fenster (Form2) ein paar Variablen verändern, welche ich im voriegem Form1 mit der headerdatei erstellt habe. Wenn ich die Eingaben erledigt habe, wird Form1 wieder sichtbar gemacht und möchte dann mit den Variablen dort arbeiten. Wie geht das? Also Variablen in einem neuen Fenster übernehmen? Und wieder zurückgeben? Auch dachte ich, ich müsste die Variablen im der Headerdatei der Form1 angeben unter public. Aber das geht irgendwie nicht. Vielleicht wäre eine kleine, aber gute Erklärung auch möglich. 😞

    Zum Schluss möchte ich noch in einer Datei infos hinterlassen, weiss bloss nicht, wie ich an eine bestimmte Position in der Datei springen kann um dort etwas zu überschreiben.

    Ron



  • wenn du z.B.

    in Form1 auf Form2 zugreifen möchtest dann sieht das so aus

    Form2->Variable=...;



  • In Form1 setzte ich SchalterPosX durch eine Headerdatei Global.h mit
    int SchalterPosX = 0;

    Diese hole ich dann ja mit
    #include "global.h"

    rein in Form1. Wenn ich diese nu in Form2 ändern möchte, klappt das nicht durch
    Form1->SchalterPosX = 4;

    Wenn ich include Global.h hier in Form 2 machen würde, dann hätte ich zwar auch die Variable, ist aber ja dann nicht die Gleiche, oder?

    Hatte mir überlegt, ich könne eine Funktion schreiben, welche diese Variable schreibt und eine, welche diese Variable liesst. (ReadPosX() und WritePosX()). Muss ich dann die Headerdatei der zugehörigenn cpp Datei in der neuen "Form" includen? Und wie spricht man diese Funktion dann an?

    Ron



  • ronschulz schrieb:

    In Form1 setzte ich SchalterPosX durch eine Headerdatei Global.h mit
    int SchalterPosX = 0;

    Diese hole ich dann ja mit
    #include "global.h"

    Soweit korrekt! 👍

    Wenn ich diese nu in Form2 ändern möchte, klappt das nicht durch
    Form1->SchalterPosX = 4;

    Das stimmt auch! 👍

    Wenn ich include Global.h hier in Form 2 machen würde, dann hätte ich zwar auch die Variable, ist aber ja dann nicht die Gleiche, oder?

    💡
    Genau da ist der Hund begraben! Es ist die gleiche, wenn Du jedesmal auf Form1->SchalterPosX zugreifst. Und das geht nur, wenn Du die Headre-datei der passenden cpp "includest". Am besten mit "Datei->Unit-Header einschliesen" und dann die passende *.h auswählen. Allerdings dazu erst im Editor die *.cpp aktivieren , in die Du includen willst!!!

    Hatte mir überlegt, ich könne eine Funktion schreiben, welche diese Variable schreibt und eine, welche diese Variable liesst. (ReadPosX() und WritePosX()). Muss ich dann die Headerdatei der zugehörigenn cpp Datei in der neuen "Form" includen? Und wie spricht man diese Funktion dann an?

    Ron

    Ist zwar komplizierter so, aber dazu schau mal in der F1-Hilfe unter properties nach..... ⚠

    Viel Erfolg!

    *EDIT:
    Ich hatte dich falsch verstanden! Oben steht nur dann kein Müll, wenn du int x; in der Unit1.h erstellt hast. Da du allerdings dieses in einer separaten headerdatei ohne .cpp getan hast, solltest Du über die Properties tun, wobei ich es noch nie ausprobiert habe, einer Header-Datei eine property zuzuzweisen, ohne dass ich eine .cpp dabei hatte...

    Mouse



  • Aber zum guten Schluss macht die FAQ wieder am meisten Sinn :
    http://www.c-plusplus.net/forum/viewtopic.php?t=39242
    :xmas1:



  • Ok, es klappt nun. Bloss habe ich auch eine Void MotorGoHome() in Form1, welche ich in Form2 aufrufen möchte. Einfach so in der Headerdatei von Form1 unter Public "Void MotorGoHome()" eintragen reicht anscheinend nicht. Was muss, um eine Funktion in der form1.cpp von Form2 aus ausführen zu können in der zugehören Headerdatei der form1.cpp stehen? Also in der Form1.h? :xmas2:



  • Hallo

    Bloss habe ich auch eine Void MotorGoHome() in Form1, welche ich in Form2 aufrufen möchte. Einfach so in der Headerdatei von Form1 unter Public "Void MotorGoHome()" eintragen reicht anscheinend nicht. Was muss, um eine Funktion in der form1.cpp von Form2 aus ausführen zu können in der zugehören Headerdatei der form1.cpp stehen? Also in der Form1.h?

    Du hast vielleciht das Semikolion vergessen?

    void MotorGoHome();
    

    Ist die Funktion ein Member von Form1, oder eine eigene Funktion?

    bis bald
    akari



  • Das ist drin. Klar! 😉 Aber was muss in der Headerdatei stehen?



  • akari schrieb:

    Ist die Funktion ein Member von Form1, oder eine eigene Funktion?

    bis bald
    akari

    Das ist die Frage, und ohne Antwort keine Gegenantwort... 🕶

    Naja, wenn in Form1.cpp

    void Form1::MotorGoHome()
    {
    ......
    }
    

    steht und in der zugehörigen Form1.h die Deklaration unter

    public
    

    dann kannste die in Form2.cpp mit

    Form1->MotorGoHome();
    

    ansprechen.
    Und in der form2.cpp muss nur die Form1.h inkludiert werden:

    #include "Form1.h"
    

    Viel Erfolg, Mouse

    P.S.: Sry, Frage nicht beantwortet: in der Form2.h muss nix davon stehen..... 😃



  • Ok, ich glaube, der Fehler liegt in der H-Datei. Wie sieht dort die Deklaration genau aus?



  • D@ngermouse schrieb:

    **
    Naja, wenn in Form1.cpp

    void Form1::MotorGoHome()
    {
    ......
    }
    

    steht und in der zugehörigen Form1.h die Deklaration unter

    public
    

    dann kannste die in Form2.cpp mit

    Form1->MotorGoHome();
    

    ansprechen.
    Und in der form2.cpp muss nur die Form1.h inkludiert werden:

    #include "Form1.h"
    

    Viel Erfolg, Mouse

    P.S.: Sry, Frage nicht beantwortet: in der Form2.h muss nix davon stehen.....** 😃

    Alle Fragen beantwortet? In welcher "H-Datei" meinst Du denn....
    Bitte genaue Angaben!!!

    Mouse



  • Ich meine, wie der Eintrag, also die Deklaration in der H-Datei aussehen muss. Das weiss ich nämlich nicht. 😞



  • im Header sollte es so stehen

    public:
      void MotorGoHome();
    


  • Hm. So einfach? Ich werde es testen und mich hier wieder melden. So hatte ich es aber schon versucht, glaube ich. Aber wenn es nicht geht, bringe ich die Fehlermeldung hier mit ein. 🙂

    ABER DANKE DAFÜR!!!! 👍



  • So, habe nun die Fehlermeldung:

    'TForm1::MotorGoHome()'referenced from d:\........\Form1.obj

    Wat is dat..?



  • also nochmal zusammengefasst:

    in der Form1.h steht

    class TForm1 : public TForm
    {
    public:
      void MotorGoHome(); 
    }
    

    in Form1.cpp steht

    void Form1::MotorGoHome();
    { //Tu etwas }
    

    und in Form2.cpp kannst du mit

    Form1->MotorGoHome();
    

    drauf zugreifen

    ausserdem kannst du mal aus deinem Projektverzeichnis alle Dateien mit der Endung "obj" löschen und dann neu kompilieren



  • Linnea schrieb:

    in Form1.cpp steht

    void Form1::MotorGoHome();
    { //Tu etwas }
    

    [cpp]void TForm1::MotorGoHome()
    { //Tu etwas
    }[/cpp]



  • D@ngermouse schrieb:

    Und in der form2.cpp muss nur die Form1.h inkludiert werden:

    #include "Form1.h"
    

    Viel Erfolg, Mouse

    P.S.: .... in der Form2.h muss nix davon stehen..... 😃

    Jetzt aber....
    Mouse



  • Es hat geklappt! Ich habe die :: verwendet und das T vor dem Form1 gesetzt. Das fehlt auch. Nun geht es! DANKE!!!! 👍


Anmelden zum Antworten