variablen in einer schleife ansprechen



  • hai!

    ich weiß, für euch ist das sicher eine newbie frage - aber ich weiß einfach nicht weiter.

    ich hab 10 labels (la0,la1,la2,...) die ich in einer Schleife nacheinander ansprechen möchte.

    z.b. so:

    for (i=0;i<10;i++) lai->Text = i;
    

    d.h. ich möchte die variablennamen der reihe nach durchlaufen...

    geht das irgendwie?

    lg, smeagollum



  • Hallo

    siehe BCB-FAQ hier im Forum, Abschnitt Komponenten.

    bis bald
    akari



  • um die labels
    so ansprechen zu könne musst du ein array machen
    im header:

    TButton *btn[10];
    //_--------------_
    //code
    
    for (int i=0 ; i<10 ; i++)
    {
    btn[i] = new TButton;
    btn[i]->Left = 10;
    btn[i]->Top = 25*i+5; //fünf pixel abstand immer
    btn[i]->Width = 40;
    btn[i]->Heigth = 25;
    .
    .
    .
    
    }
    

    auf die art und weise geht das mit allen anderen komponenten auch 😃

    lg

    T I M



  • sehe das du edits haben wolltest.
    also dann halt anders:

    damit hast du aber nur speicherplatz geschaffen, das bedeutet du erzeugst deine komponenten zur laufzeit.
    du musst sie genauso wie in der for-schleife erzeugen!
    und dann geht deine schleife auch:

    TLabels * la[10];
    
    for (int i=0; i<10 ; i++) 
    la[i]->Text = i;
    

    t i m



  • Das ist wohl nicht das, was der Fragesteller will. Hier geht es m.E. um ansprechen von Komponeten die nicht zur Laufzeit erzeugt werden. -> Siehe FAQ.

    Zudem wird wohl dein Codebeispiel nicht funktionieren, ohne

    a) überhaupt ein TEdit mit new zu erzeugen

    b)TButton so nicht mit new erzeugt werden kann (siehe Konstruktor)

    c) zumindestens der doch recht wichtige Hinweis fehlt, dass Parent versorgt sein will, da man sonst gar nix sieht. Da könnte zu Verwirrungen führen.

    Wie gesagt, erscheint hier eher das Durchlaufen der im Formular vohandenen Komponenten die Frage gewesen zu sein. Es ist nicht notwendig die Komponenten zur Laufzeit zu erzeugen um über ein Array darauf zuzugreifen.



  • Naja, wenn er die Komponenten unbedingt in einem Array ansprechen möchte, kann er diese ja im Konstruktor der Form in einem Zeiger-Array hinterlegen. Dann gehts mit dem Designer und dem Array.

    mfg
    xXx



  • for (i=0;i<10;i++)
    {
    TLabel* TempLbl =dynamic_cast<TLabel*>(Form1->FindComponent("Label"+IntToStr(i)));
    TempLbl->Text = i;
    }
    

    ca. so



  • GreyHound schrieb:

    for (i=0;i<10;i++)
    {
    TLabel* TempLbl =dynamic_cast<TLabel*>(Form1->FindComponent("Label"+IntToStr(i)));
    TempLbl->Text = i;
    }
    

    ca. so

    hm, das compiliert 👍 - aber was es genau macht und wie ich dann mein array verwenden kann versteh ich nicht wirklich... *schäm* 😕 😕



  • Die Schleife läuft 10 ma, von 0-9

    Dann wir ein temporäres Label angelegt, welches gleich mit dem Label belegt wird, welche die Funktion FindComponent findet. Das ist wohl die für dich entscheidene Rountine. Sie sucht im Formular alle Labels die mit "Label" beginnen und dann eine Ziffer (0-9) haben. Durch die Zuordnung des gefundenen Ergebnisses an das temp. Labelobjekt kannst du diese nun ansprechen und damit so alle Label sder Formulars bearbeiten



  • Christian211 schrieb:

    Die Schleife läuft 10 ma, von 0-9

    Dann wir ein temporäres Label angelegt, welches gleich mit dem Label belegt wird, welche die Funktion FindComponent findet. Das ist wohl die für dich entscheidene Rountine. Sie sucht im Formular alle Labels die mit "Label" beginnen und dann eine Ziffer (0-9) haben. Durch die Zuordnung des gefundenen Ergebnisses an das temp. Labelobjekt kannst du diese nun ansprechen und damit so alle Label sder Formulars bearbeiten

    soweit so klar, danke!

    was macht dynamic_cast?



  • Der sorgt dafür, dass du in deinem temp. Objekt auch ein TLabel bekommst

    Steht hier

    http://tutorial.schornboeck.net/dynamic_cast.htm

    oder auch in der Hilfe -> dort auch Erläuterung anderer cast-Methoden


Anmelden zum Antworten