TEdit Felder über for-Schleife auslesen



  • Hallo..

    Ich habe das mal aus dem Link versucht:

    DynamicArray<TEdit*>TEdArray;
    int TEdNum = 201;
    
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
       : TForm(Owner)
    {
    TEdArray.Length = TEdNum;
    for (int i = 0; i < TEdArray.Length; i++)
     TEdArray[i] = new TEdit(this);
    }
    
    LMeldung[0] = TEdArray[1]->Text.Length();
    Meldung[0]  = TEdArray[1]->Text;
    

    Leider taucht in LMeldung[0] die Textlänge und in Meldung[0] nicht der Text vom Edit Feld auf.

    Habe ich was übersehen ?

    lg, markus



  • Hallo

    Leider taucht in LMeldung[0] die Textlänge und in Meldung[0] nicht der Text vom Edit Feld auf.

    Du solltest uns schon mitteilen was das für Datentypen sind, ohne diese Info kann keiner was sagen.
    gruß Rudi



  • Hallo..

    unsigned char LMeldung[200]; // Länge der Meldung
    String Meldung[200]; // Text der Meldung (200 Meldungen)

    lg, markus



  • Deinem Codeausschnitt zufolge hast du wohl weiterhin 100 manuell erstellte Edits auf der Form und zusätzlich ein TEdit-Array, zwischen denen keinerlei Zusammenhang besteht.
    Das in der FAQ beschriebene Prinzip sieht vor, auf dein Beispiel bezogen, dass alle Edits von der Form gelöscht und stattdessen zur Laufzeit mittels der Schleife erstellt werden. Dazu gehört dann, wie im FAQ-Beispiel zu sehen, aber etwas mehr als nur ein new.

    Alternativ könntest du in der Schleife auch durch die auf der Form vorhandenen Controls iterieren, per dynamic_cast den Typ prüfen und gefundene TEdits nacheinander den Array-Items zuweisen.
    Siehe dazu auch die anderen Einträge im FAQ-Abschnitt "Komponenten benutzen".



  • Guten Morgen..

    Ja, ich habe schon 200 Edit Felder auf meinem Form drauf.

    Mit den Sachen aus der FAQ komme ich nicht zurecht.

    lg, markus





  • Hallo

    Danke für den Link. Zum Ändern meiner Labels funktioniert der Code, aber zum Auslesen der Edit Felder nicht.

    for(int i=0; i <= 240; i++)
        {
            // Alle Labels verändern
            if (Form1->Components[i]->ClassNameIs("TEdit"))
            {
                LMeldung[i] = dynamic_cast<TEdit*>(Form1->Components[i])->Text.Length();
                Meldung[i]  = dynamic_cast<TEdit*>(Form1->Components[i])->Text;
            }
    
       }
    

    Ich habe 240 Edit-Felder.

    Was mache ich falsch ?

    Danke, Markus



  • ljmarkus schrieb:

    Ich habe 240 Edit-Felder.

    Das wird ja immer schlimmer.

    ljmarkus schrieb:

    Was mache ich falsch ?

    Du hast 240 Edit-Felder.



  • Nach deiner Schleife zufolge hast du aber 241. Wofür braucht man bitte so viel`?

    lg, freakC++



  • hast du nur Edits auf dem Formular oder auch anderes?
    warum nimmst du nicht wie in dem Link verwendet Form1->ComponentCount als Schleifenvariable?
    was genau funktioniert denn nicht? was erwartest du als Ergebnis?
    hast du schonmal versucht den Debugger zu verwenden?


Anmelden zum Antworten