Tree Node über Namen ansprechen



  • Hallo,

    gibt es eine Möglichkeit AddChild in einem Tree nicht über den ItemIndex, sondern über einen Schlüssel oder Feldinhalt anzusprechen ?

    Iatros



  • Hallo

    TTreeNode* __fastcall AddChild(TTreeNode* Node, const System::AnsiString S);

    Wo siehst du hier einen ItemIndex?
    Du must nur den Node liefern. Wie du den ermitelst ist deine Sache.

    Du kannst die Nodes mit TTreeNode::Data personalisieren.
    Dann kannst du über diesen zugewiesenen Wert den Node über das Item-Array des TreeViews wieder suchen.

    bis bald
    akari



  • Hallo,

    im Moment mache ich es so:

    for (int iC = 0; iC < objTree->Items->Count; iC++)
             {
                if (objTree->Items->Item[iC]->Text == sKategorie)
                {
                   Node1 = objTree->Items->Item[iC];
                   objTree->Items->AddChild(Node1, frmAuswahl->objQuery2->FieldByName("Unterkategorie")->AsString);
                }
             }
    

    Aber das ist sehr langsam. Ich hatte vorher eine Zählervariable mitlaufen lassen, und bei jedem Parent / Child Eintrag um einen erhöht. Dieser Wert war dann der Index für meinen neuen Node. Aber irgendwie lief das Ganze durcheinander, daher suche ich nach einer besseren Lösung.

    Mit Data zu arbeiten wird mir das Durchsuchen auch nicht ersparen. Ich werd mich also wieder an meine Ursprungsvariante machen.

    Danke, Iatros



  • Hallo

    du kannst ja auch einfach die Nodes selber noch in einer passenden Struktur verwalten. Zum Beispiel ein std::map<AnsiString, TTreeNode>. Dort rein legst du dann relevante Paare von Text/Node und kannst dann mit einer eifnachen Suche nach dem text den passenden Node ermitteln.

    bis bald
    akari



  • Was hälst du von FindNode ?



  • Sorry, bitte ignorieren. Hab da was verwechselt.


Anmelden zum Antworten