Komponenten sortieren



  • Hallo,
    ich würde gern die Komponenten in meinem Formular sortieren,
    so dass meine eigenen Komponenten beim Ansprechen mittels ->Components[i]
    immer ab 0 liegen,
    Hat jemand eine Idee ??
    Hintergrund ist folgender: Ich muss diese Komponenten regelmäßig durchgehen, um
    irgendwas zu prüfen, speichern oder ähnliches und löse das im Moment mit dieser
    Schleife:

    for (int i=0;  i<frmmeinFormular->ComponentCount; i++)
      {
        if (frmmeinFormular->Components[i]->ClassNameIs("TmeineKlasse") )
        {
          if (frmmeinFormular->Components[i]->Name == "einName")
          {
            ....
          }
        }
      }
    

    Wenn ich eine spezielle Komponente bearbeiten will, muss ich alle durchdackeln
    und den Namen abfragen. Da wäre es doch einfacher, die Komponenten zu Beginn des
    Programms zu sortieren und anschließend über einen Index zuzugreifen .



  • Hallo,

    Du kannst dir doch ein separates Array deiner Komponenten beim ersten Durchlauf bilden und dann immer das abfragen.
    Etaw so

    std::vector<TmeineKlasse*> myclasses;
    // Dann im Konstruktor oder so
      for (int i=0;  i<frmmeinFormular->ComponentCount; i++)
      {
        TmeineKlasse* myclass = dynamic_cast<TmeineKlasse*>(frmmeinFormular->Components[i]);    
        if (myclass != 0 )
           myclasses.push_back(myclass);
      }
    

    Hier brauchst du bei allen späteren Aufrufen nur noch myclasses durchzugehen. Wenn du dynamisch Komponenten hinzufügst oder löschst musst du den vectur natürlich updaten. Ich verwende dynamic_cast statt ClassNameIs weil es standardkonformer und schneller ist.



  • Hallo,

    Ich kenn mich insgesamt nicht so gut aus, daher hab' ich immer nur simple Lösungsansätze: (Fast?) jede VCL-Komponente hat doch die "Tag"-Eigenschaft. Reicht das nicht einfach, um dein Vorhaben zu realisieren?

    MfG


Anmelden zum Antworten