Tree Nodes einfügen / löschen



  • Hallo,

    beim Klick auf einen Node:

    sNodeText = "";
    
       TPoint P = Mouse->CursorPos;
       P = objTree->ScreenToClient(P);
    
       THitTests HT = objTree->GetHitTestInfoAt(P.x,P.y);
       TNodeAttachMode AttachMode;
    
       TTreeNode *pItem = objTree->GetNodeAt(P.x,P.y);
       if (HT.Contains(htOnItem) || HT.Contains(htOnIcon))
       {
    	  sNodeText = objTree->Selected->Text;
    	  iHitIndex = objTree->Selected->Index;
    	  Edit1->Text = IntToStr(iHitIndex);
       }
    

    Dann möchte ich den angeklickten Node zum Parent machen und einen Unterknoten einfügen:

    TTreeNode *Node1;
    
    	for (int i = 0; i < objTree->Items->Count; i++)
    	{
    		if (objTree->Items->Item[i]->Text == sNodeText)
    		{
    			Node1 = objTree->Items->Item[objTree->Items->Item[i]->Index];
    			objTree->Items->AddChild(Node1, "Test");
    		}
    	}
    

    Das funktioniert, so lange ich nicht unterhalb eines bereits eingefügten Node einen neuen einfügen möchte.

    1
    2
    3
    4
    5

    in 4 einen neuen
    1
    2
    3
    4
    4-1
    5

    Dann in 2 einen neuen
    1
    2
    2-2
    3
    4
    4-1
    5

    Wenn ich danach z. B. bei 3 einen weiteren einfügen will klappt es nicht mehr. Er läuft dann durch eine Endlosschleife.
    1
    2
    2-2
    3
    4
    4-1
    5



  • Ich müsste bei jedem Einfügen / Löschen den Item Index der einzelnen Nodes neu festlegen. Hab gesehen, dass neu eingefügte dann jeweils den Index 0 haben.



  • die angeklikcte bzw. selectierte Node in einer TTreeView kannst du einfach so ermitteln.

    TTreeNode *SelectedNode;
            SelectedNode = TreeView1->Selected;
    

    An diesenr SelectedNode kannste nun einfach neue Node anfügen ohne große Aufwände.

    TreeView1->Items->AddChildObject(SelectedNode, "NEU", NULL);
    

    In dem Data Feld dort wo NULL drin steht kannst du einfach von einem Object deiner Wahl einen Zeiger hinterlegen und somit immer auf diese der Node zugewiesenen Daten über den Zeiger zugreifen.
    Somit hast du nicht nur ne langweilige Node sondern kannst auch belibig Daten zu jeder angelegten Node zusätzlich anlegen.
    Nicht alle Komponenten liefern dir so eine geniale einfache Möglichkeit.


Anmelden zum Antworten