TreeView Knoten Data -> wie schreiben bzw. wieder lesen ?



  • Da ich leider in der Online Hilfe (BCB-Hilfe ) nix gescheites finden kann, will ich hier mal fragen.
    Ich möchte den einzelnen Knoten einer TreeView Komponente beim erstellen zusätzliche Informationen übergeben (eigendlich nur eine Zahl), um sie dann später wieder eindeutig zu identifizieren. Wie mach ich das ? Kann mir jemand mal ein Beispiel geben, wie ich eine Zahl mit Data verbinde und wieder abrufe ?

    Danke.



  • Schon was von der BCB-Hilfe gehört, da gibts sogar ein Beispiel?!



  • Scherzkeks, was glaubst Du warum ich hier frage ? Außerdem ist die Frage doch wohl eindeutig oder ? Wollte ja nur ein ganz einfaches Beispiel, da ich leider in der BCB Hilfe nur eins gefunden habe und das auch noch sehr unvollständig (wie ich schon geschrieben habe). Auf solche Art Kommentare kann ich gern verzichten. Entweder man hilft jemand oder läßt es sein.



  • Hallo

    In der BCB-Hilfe ist doch unter TTreeNode::Data ein gutes Beispiel...
    aber für dich noch eins mit Zahlen :

    // irgendwo vorher TreeView mit Nodes füllen, die in Data direkt eine Integerzahl speichern
      TreeView1->Items->AddObject(NULL, "Zahl 1", reinterpret_cast<void*>(1));
      TreeView1->Items->AddObject(NULL, "Zahl 2", reinterpret_cast<void*>(2));
    ...
    // Wenn ein Node ausgewählt wird, die Zahl aus Data lesen und anzeigen
    void __fastcall TForm1::TreeView1Click(TObject *Sender)
    {
      int x = reinterpret_cast<int>(TreeView1->Selected->Data);
      ShowMessage(x);
    }
    

    bis bald
    akari



  • super ! Danke akari !
    Hab ich nicht gefunden das Beispiel. wo genau ist das ? hab nur unter Data dieses gefunden.

    typedef struct MyRec
    {
      AnsiString FName, LName;
    
    } TMyRec;
    typedef TMyRec* PMyRec;
    
    Wenn diese Typen nun verwendet werden, kann mit folgendem Code als letzte Verzweigung des angegebenen Knotens ein weiterer Knoten zu TreeView1 hinzugefügt werden. Ein Datensatz des Typs TMyRec wird dem hinzugefügten Eintrag zugeordnet. Die Feldinhalte von FName und LName werden aus den Eingabefeldern Edit1 und Edit2 übernommen. Der Wert des Parameters Index stammt aus Edit3. Das Element wird nur dann hinzugefügt, wenn Index einen gültigen Wert hat.
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    PMyRec  MyRecPtr;
    int TreeViewIndex;
    TTreeNodes* pItems;
    
     MyRecPtr = new TMyRec;
     MyRecPtr->FName = Edit1->Text;
     MyRecPtr->LName = Edit2->Text;
     TreeViewIndex = StrToInt(Edit3->Text);
     pItems = TreeView1->Items;
     if (pItems->Count == 0)
       pItems->AddObject(NULL, "Item" + IntToStr(TreeViewIndex), MyRecPtr);
     else if ((TreeViewIndex < pItems->Count) && (TreeViewIndex >= 0))
    
          pItems->AddObject(pItems->Item[TreeViewIndex], "Item" + IntToStr(TreeViewIndex), MyRecPtr);
    }
    
    Wenn ein Element hinzugefügt wurde, das einen Datensatz des Typs TMyRec enthält, kann mit dem folgenden Code der Feldwert von FName und LName abgerufen und als Beschriftungstext angezeigt werden.
    
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    Label1->Caption = PMyRec(TreeView1->Selected->Data)->FName + " " +
                     PMyRec(TreeView1->Selected->Data)->LName;
    }
    


  • Nochmals Danke.
    Mein Fehler war, daß ich nicht bei AddObject() oder AddChildObject() gesucht habe, sondern nur bei Add() oder AddChild().



  • Sunday schrieb:

    Schon was von der BCB-Hilfe gehört

    kleiner Blick dort rein wirkt wunder 😉



  • kleiner Blick dort rein wirkt wunder 😉

    ja manchmal wundert man sich, wenn man da rein schaut lol
    meist ok, aber kann auch Frust auslößen.



  • @ akari

    ist da noch irgendetwas zu berücksichtigen in deinem Beispiel ? Ich meine ne Funktion zu erstellen o.ä. ?
    Weil, wenn ich das Beispiel benutze das Programm zwar läuft und auch das tut was es soll, aber die Programmierhilfe anschließend nicht mehr funktioniert.
    'Die Programmierhilfe kann nicht aufgerufen werden, da der Quelltext Fehler enthält' tritt aber erst viel später, also weiten unten irgendwo im Quelltext auf.



  • habs geklärt ! Bug ?
    so läuft zwar das Programm, aber irgendwo später kann ich die Hilfe nicht mehr aufrufen.

    TreeView_WP->Items->AddChildObject(TreeView_WP->Items->Item[x], WPLName, reinterpret_cast<void*>(StrToInt(NPJ_File->ChildNodes->Nodes[i]->ChildNodes->Nodes[WideString("ID")]->Text)));
    

    so funktioniert es wieder.

    MEMBER_ID = StrToInt(NPJ_File->ChildNodes->Nodes[i]->ChildNodes->Nodes[WideString("ID")]->Text);
    TreeView_WP->Items->AddChildObject(TreeView_WP->Items->Item[x], WPLName, reinterpret_cast<void*>(MEMBER_ID));
    



Anmelden zum Antworten