Wert von Form1 zu Form2 übergeben



  • Nabend,
    irgendwie blick ich da noch nicht durch. Hab nach der Hilfe von Christian211 eigentlich das meiste ganz gut hinbekommen. Also so funktioniert es ... fast O.o

    Ich habe:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "login.h"
    #include "fenster.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm4 *Form4;
    AnsiString Nick, Pass, login_session, login_delete;
    String Nickname = "Test1";
    
    __fastcall TForm4::TForm4(TComponent* Owner)
        : TForm(Owner)
    {
    }
    
    void __fastcall TForm4::Image1Click(TObject *Sender)
    {
    
    }
    

    In der Header Datei ist steht unter dem public ebenfalls String Nickname;
    Wenn ich nun auf Form5 schaue steht dort Test1 das ist soweit ja auch richtig, wenn ich allerdings folgendes mache kommt nix ...

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "login.h"
    #include "fenster.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm4 *Form4;
    AnsiString Nick;
    String Nickname;
    
    __fastcall TForm4::TForm4(TComponent* Owner)
        : TForm(Owner)
    {
    }
    
    void __fastcall TForm4::Image1Click(TObject *Sender)
    {
        Nick = "Test2;
        Nickname = Nick;
    }
    

    Dient alles erstmal nur zum testen der ganzen Sache 🙂



  • Du hast dich also für globale Variablen entschieden. Was mich irretiert ist, das deine Codebeispiele 2 x offenbar die Form4 zeigen. Wenn ich das richtig verstanden habe, willst du in Form 4 Variablen anlegen und diese in Form 5 auch nutzen

    Anlegen in Form4

    String Nick, Pass, login_session, login_delete;
    String Nickname = "Test1";
    

    In form 5 "an der gleichen Stelle"

    extern String Nick, Pass, login_session, login_delete;
    extern String Nickname = "Test1";
    

    Damit wird dem Compiler Datentyp und Größe mitgeteilt und ihm gesagt, "die Dingern sind schon anderer Stelle belegt worden"

    String <-> sind übrigens identisch. Ein netter bei Borland hat irgendwo ein typedef eingefügt.



  • Berichtigung:

    In form 5 "an der gleichen Stelle"

    extern String Nick, Pass, login_session, login_delete;
    extern String Nickname;
    


  • Hier bekommt man ja schnell ne Antwort 🙂
    Das hast du soweit richtig verstanden. Es will nur aus irgendeinen Grund nicht richtig. Also mal den Code für Form4 und Form5 ...

    Form4:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "login.h"
    #include "fenster.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm4 *Form4;
    String Nick, Pass, login_session, login_delete;
    String Nickname;
    
    //--------------------------------------------------------------------------- 
    __fastcall TForm4::TForm4(TComponent* Owner)
        : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm4::Image1Click(TObject *Sender)
    {
        Nickname = "Test1";
        Form5->Show();
    }
    

    In der login.h steht unter public String Nickname;

    So sieht dann Form 5 aus:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "login.h"
    #include "fenster.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm5 *Form5;
    extern String Nickname;
    //---------------------------------------------------------------------------
    __fastcall TForm5::TForm5(TComponent* Owner)
        : TForm(Owner)
    {
        Panel1->Caption = Nickname;
    }
    


  • In der login.h steht unter public String Nickname;

    Neee, entweder als globale Variable oder als Member einer Klasse. nix mischen.

    Wenn du das mit globalen Variablen machst, dann ist in den Klassendefinitionen nix reinzuschreiben



  • Achso 🙂
    Nagut geht leider immer noch nicht. Mensch das nervt langsam ^^



  • Dann maile mir das Projekt zu

    cecke@marquardtnet.info



  • Hab das Problem schon gefunden ...
    Hatte in der fenster.h unter public ebenfalls String Nickname; eingefügt ^^

    Vielen Dank für deine schnelle Hilfe Christian211



  • Bitte 🙂



  • Hab da noch ne Frage 🙂
    Wie schaut es denn aus, wenn man es ohne globale Variablen machen will?



  • Gast|nOnAmE schrieb:

    Hab da noch ne Frage 🙂
    Wie schaut es denn aus, wenn man es ohne globale Variablen machen will?

    geht nicht eigentlich
    Form1->meine_variable;?



  • Hallo

    dazu müßt ihr nur mal in den mir verwiesenen FAQ-Beitrag schauen.

    bis bald
    akari





  • Siehe dazu auch folgenden FAQ Beitrag:
    Public Variablen sind böse… aber wieso?



  • Das gefragte Problem hat jedoch nix mit public odr nicht zu tun. Da man die Klasse mit einbindet, und direkt mit der Klasse arbeitet kann man die Variablen direkt aus der Klasse benutzen, unabhängig, ob sie public sind oder nicht.

    Der Text auf meiner Seite hatte jedoch das Beipiel im public-Bereich. Das war schlecht und wurde korrigiert.



  • Hallo,

    kann mir jemand das vielleicht mal zuschicken, wie es richtig geht? mail is: thekingofbones@web.de

    bitte bitte

    mfg

    andy



  • ich suche sozusagen ein Login, also wo sich ein "loginfenster" öffnet & ich da meine Benutzerangaben eingeben kann. Benutzername + Passwort, geht sowas?? wenn ja bitte sagt es mir!

    mfg
    andy



  • Was hat das mit diesem Thread zu tun?

    Mache einen Auf und stelle deine Frage vernüftig!

    geht sowas?? wenn ja bitte sagt es mir!
    

    Sicherlich geht das



  • gleich wird wieder wer behaupten, globale Variablen wären böse 🙂



  • snOOfy schrieb:

    gleich wird wieder wer behaupten, globale Variablen wären böse 🙂

    Das sind keine Behauptungen das sind Fakten !!


Anmelden zum Antworten