TStrings::AddObject jemand nen eleganteren Vorschlag?



  • Moin,

    ich habe folgenden Code gebaut:

    void __fastcall TForm2::FormActivate(TObject *Sender)
    { ComboBox1->Items->Clear();
      String SQLstr="SELECT PK, NAME_DEU FROM TABELLE ORDER BY UPPER(NAME_DEU)";
      Form1->Query1->SQL->Text=SQLstr;
      Form1->Query1->Open();
      while (!Form1->Query1->Eof)
      { AnsiString* CCode = new AnsiString;
        *CCode = Form1->Query1->FieldByName("PK")->AsString;
        ComboBox1->Items->AddObject(
            Form1->Query1->FieldByName("NAME_DEU")->AsString,
            (TObject *)CCode);
        Form1->Query1->Next();
      }
      Form1->Query1->Close();
    }
    

    In CCode speicher ich den Primärschlüssel des Datendatzes ab, den ich später wieder brauche, angezeigt wird aber die deutsche Bezeichnug NAME_DEU.

    Da die Tabelle sich schnell verändern kann, muß ich die Combobox onActivate füllen.
    Nun meine zwei Fragen:
    1. Hat jemand ne bessere Idee zu dem Thema?
    2. Das mit dem ComboBox1->Items->Clear() ist doch nicht ganz sauber, oder?
    Meiner Meinung nach bleiben die TObjects doch noch fröhlich im Speicher.
    Ich sollte die noch löschen, oder? Aber wie und wo?

    Danke schonmal im Vorab



  • DMarko,

    DMarko schrieb:

    Meiner Meinung nach bleiben die TObjects doch noch fröhlich im Speicher.

    Würde ich auch sagen.

    DMarko schrieb:

    Ich sollte die noch löschen, oder? Aber wie und wo?

    Bevor Du die Box leerst oder noch besser während:

    while (ComboBox1->Items->Count > 0)
    {
        delete (String*)(ComboBox1->Items->Objects[0]);
        ComboBox1->Items->Delete(0);
    }
    

    (ungetestet)


Anmelden zum Antworten