Forms - Variablenübergabe an andere Form ohne Timer etc.



  • Da ich auf das Thema in der FAQ Variablenübergabe an andere Form nicht Antworten konnte schreib ich jetzt das hier rein:

    Also es geht um eine Variablenübergabe an andere Form aber ohne einen Timer etc.

    Zuerst hier der Code der Form die die Variable erhalten soll:

    //------Unit1.cpp------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    
    String Variable = "";
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm1::SetVariable1(void)
    {
            if (Label1->Caption != "") {
            Variable = Label1->Caption;
            }
    }
    //---------------------------------------------------------------------------
    

    In der Unit1.h muss unter published das eingetragen werden:

    void __fastcall SetVariable1(void);
    

    Nun brauchen wir folgenden Code in der Form von der die Variable übergeben werden soll.

    //------Unit2.cpp------------------------------------------------------------
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    String Variable = "Das was übergeben werden soll";
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    void __fastcall TForm2::FormCreate(TObject *Sender)
    {
            Form1->Label1->Caption = Variable;
            Form1->SetVariable1();
    }
    //---------------------------------------------------------------------------
    

    Erläuterung:

    Nachdem die Variable in das Label der Form1 geschrieben wurde wird in Form1 die Funktion ausgeführt und somit der code:

    if (Label1->Caption != "") {
            Variable = Label1->Caption;
        }
    

    ausgeführt, der den Text aus der Label als Variable speichert.

    Mfg. BNS



  • Hallo

    Ist das etwa ein ernsthafter Vorschlag? Tut mir leid aber das ist wirklich nicht brauchbar.
    - globale Variablen, besser sind Membervariablen, in dem Fall von TForm2
    - Zweckentfremdung eines Labels, besser eine Getter-Methode des Forms
    - Verwendung des OnCreate-Events, besser ist der Konstruktor des Forms
    - Aufruf von Update() und Close wo da Form noch gar nicht angezeigt wird. Wird gar nicht gebraucht

    Allgemein : Schau dir erstmal die Grundlagen von OOP in C++ an.

    bis bald
    akari



  • Hab ein paar Sachen daran verbessert.



  • bitte nich haun, abba ich versteh denn sinn dieses eintrags nich 😞 .
    was ist eine variablenübergabe ohne timer?? ich habe noch nie eine variable mit timer übergeben?
    soll das eine einfache variablenübergabe von form zu form sein? und wenn ja, wieso wurde hier keine public variable deklariert?

    grüße litooo



  • Hallo

    was ist eine variablenübergabe ohne timer?? ich habe noch nie eine variable mit timer übergeben?

    BNightSpeeder bezieht sich auf diesen FAQ-Eintrag, wo unter anderem ein Timer verwendet wird. Der ist aber nur zur Demonstration, kein Teil des Prinzips.
    Selbstverständlich braucht man keinen Timer nur zur Variablenübergabe.

    wieso wurde hier keine public variable deklariert?

    weil das noch schimmer wäre... Stichwort Datenkapselung.
    Richtig wäre eine private Membervariable des Forms inklusive Gettermethode, bzw. eine entsprechende VCL-Property.

    bis bald
    akari


Anmelden zum Antworten