Auf dymnamisch angelegtes Label zugreifen - Was mache ich falsch



  • Hallo Zusammne,
    ich möchte auf mehrere dynamisch angelegt Label zugreifen und den Caption Wert ändern.
    Angelegt habe ich die Label so:

    for(int i = 0; i < DataModule1->sql_kunden->RecordCount; i++)
    {
            label[i] = new TLabel(statistik_palettenplaetze->GBErgebniss);
            label[i]->Parent = statistik_palettenplaetze->GBErgebniss;
            label[i]->Top = hohe * 24;
            label[i]->Left = 16;
            label[i]->Name = "L" + DataModule1->sql_kunden->FieldByName("id")->AsString;
            label[i]->Font->Style = TFontStyles();
            label[i]->Show();
            label[i]->Caption = DataModule1->sql_kunden->FieldByName("firma")->AsString;
    
            label2[i] = new TLabel(statistik_palettenplaetze->GBErgebniss);
            label2[i]->Parent = statistik_palettenplaetze->GBErgebniss;
            label2[i]->Top = hohe * 24;
            label2[i]->Left = 236;
            label2[i]->Name = "L" + DataModule1->sql_kunden->FieldByName("id")->AsString + "Ergebniss";
            label2[i]->Font->Style = TFontStyles();
            label2[i]->Show();
            label2[i]->Caption = "Ergebniss";
    
            if(DataModule1->sql_kunden->FieldByName("firma")->AsString == "Axel Springer AG")       {
                    image[1] = new TImage(statistik_palettenplaetze->GBErgebniss);
                    image[1]->Parent = statistik_palettenplaetze->GBErgebniss;
                    image[1]->Top = hohe * 24;
                    image[1]->Left = 115;
                    image[1]->Width = 13;
                    image[1]->Height = 13;
                    image[1]->Picture->LoadFromFile(ExtractFilePath(Application->ExeName) + "images\\info.bmp");
                    image[1]->OnClick = statistik_palettenplaetze->StatistikAxelSpringer;
                    image[1]->Show();
            }
    
            DataModule1->sql_kunden->Next();
            hohe = hohe + 1;
    }
    

    Drauf zugreifen möchte ich so:

    sql_select = "SELECT * from kunden order by firma";
    DataModule1->sql_kunden->SQL->Clear();
    DataModule1->sql_kunden->SQL->Add(sql_select);
    DataModule1->sql_kunden->Open();
    DataModule1->sql_kunden->First();
    
    for(int i = 1; i <= DataModule1->sql_kunden->RecordCount; i++)  {
        Feld = "L" + DataModule1->sql_kunden->FieldByName("id")->AsString + "Ergebniss";
        TLabel* Label = dynamic_cast<TLabel*>(statistik_palettenplaetze->FindComponent(Feld));
        if(Label)    {
            Label->Caption = kunde[StrToInt(DataModule1->sql_kunden->FieldByName("id")->AsString)];
        }
        DataModule1->sql_kunden->Next();
    }
    

    Label ist leider NULL. Er findet das Label nicht. Wenn ich aber nach einem Label Suche das ich im Entwurf erstellt habe wird es gefunden.

    Wo könnte mein Fehler liegen?`

    Danke im voraus.



  • Hallo

    Ah, jetzt hast du das mit dem FindComponent noch geändert. Dann las dir doch mal die Werte in dem String Feld zur Laufzeit anzeigen (Debugger), ob dort wirklich das drin steht was du willst.

    Und da du deine Komponenten doch schon in einem extra Array zusammenfast, warum greifst du nicht auch später über dieses Array auf die Komponenten zu, sondern verwendest das langsamere und indirektere FindComponent zurück?

    bis bald
    akari



  • Bietet sich nicht sowas wie ein ListView an?



  • @akari,
    hast du ein Beispiel wie ich direkt auf das Array zugreife? Das komische ist, dass genau das was ich hier machen will in einem anderen Programm funktioniert.



  • Hallo EPMS,

    du fügst die Labels ja auch 'statistik_palettenplaetze->GBErgebniss' hinzu (P.S. "Ergebnis" schreibst sich mit nur einem 's' am Ende 😉

    Also mußt du auch dadrin mittels FindComponent suchen...



  • Hallo

    EPMS schrieb:

    @akari,
    hast du ein Beispiel wie ich direkt auf das Array zugreife? Das komische ist, dass genau das was ich hier machen will in einem anderen Programm funktioniert.

    Auch nicht anders, als du es beim Erstellen machst. Die Arrays müßen natürlich auch im Bereich der Schleife aus dem zweitem Codeauszug bekannt sein.
    Und du must aus dem Wert vom Datenbank-Feld "id" auf den Index im Array kommen, und sei es durch eine extra map, die die zusammengehörigen Paar aus "id" und Array-Index zwischenspeichert.

    bis bald
    akari


Anmelden zum Antworten