Zugriff auf Komponenten von aussen



  • wie kann ich auf die Werte von Komponenten zugreifen wenn ich vor

    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
    }
    

    eine Funktion definiere in der ich zB einen Wert einer Editkomponente brauch?



  • Bevor der Konstruktor eines Objektes aufgerufen wurde, kannst Du nicht darauf zugreifen?!? Oder ich verstehe die Frage nicht... 😉



  • rudpower schrieb:

    wie kann ich auf die Werte von Komponenten zugreifen wenn ich vor

    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
    }
    

    eine Funktion definiere in der ich zB einen Wert einer Editkomponente brauch?

    Vor (im Sinne zeitlich) dem Konstruktoraufruf kannst du nicht auf die Komponenten zugreifen.

    Da die Komponenten im published-Bereich öffentlich sind, kannst du aber mittels eines Zeigers auf eine gültige Instanz eines Formulars darauf zugreifen. Aber auch nur während seiner Lebenszeit.

    // Nehmen wir mal an das auf der Form1 eine Textbox nahmens Edit1 sitzt...
    // (Beispiel einer modalen Form)
    TForm1 * form = new TForm1(Application);
    form->Edit1->Text = "abc"; // Wert vor dem Anzeigen, aber nach der Konstruktion
                               // setzen
    form->ShowModal();
    String wertNachVerlassen = form->Edit1->Text; // Wert nach dem Schließen, aber
                               // vor der Destruktion abrufen.
    delete form;
    

    Wobei ich werte eher über Methoden als über Komponenten abfragen oder Setzen würde (falls du sie mal umbenennst, auslagerst etc. musst du dann nur die entsprechende Methode der Form umstellen und das Programm läuft weiterhin).



  • wie löse ich das problem am schlausten?



  • rudpower schrieb:

    wie löse ich das problem am schlausten?

    Wie gesagt: Es gibt KEINE Möglichkeit an die Komponente heran zu kommen, bevor die Form erzeugt ist (Was auch logisch ist, da die Daten der Komponente an der Instanz hängen; wenn du die gleiche Maske 2mal parallel öffnest, sind die Werte auch voneinander unabhängig).

    Du kannst an die Werte ausschließlich zur Lebenszeit heran gelangen. Das heißt aber nicht das die Maske zu dem Zeitpunkt bereits sichtbar (oder noch sichtbar) sein muss (Siehe mein Beispiel).


Anmelden zum Antworten