TreeView Objekt Ellemenete durchlaufen
-
Hallo,
ich habe in der letzten Zeit mal die TreeView-Gschichte in diesem Forum verfolgt. Wollte mich nun auch mal in die Sache einarbeiten.
Habe aber schnell ein Problem entdeckt.
Ich habe eine Ordnerstruktur die ich abbilde. Wenn ich auf ein Element Doppelklicke sollen alle Unterobjekte ihre Icons ändern.
Dazu habe ich rekursiv versucht alle untergeordeneten Elemente zu erfassen. Hier der Text:__fastcall TForm5::CheckTreeEntry(TTreeNode* Node) { /* TreeNode * Node: Übergabe des Nodes */ // Funktionsvariablen TTreeNode * NextNode; // Nächster Node NextNode = Node->GetNext(); while (NextNode != NULL) { AnsiString T = NextNode->Text; // Zustandsprüfung des übergebnenen Knotens switch (Node->ImageIndex) { // ZustandsPrüfung des nächsten Knotens // Sollte Knoten als Ordner gewählt worden sein... case STATE_FOLDER_SELECTED : switch (NextNode->ImageIndex) { // Der Unterknoten wir aktviert case STATE_FILE_NOTSELECTED : NextNode->ImageIndex = STATE_FILE_SELECTED; NextNode->StateIndex = STATE_FILE_SELECTED; break; // Sollte der Unterknoten ein Ordner sein, wird dieser // aktiviert und die Funktion erneut Rekursiv aufgerufen case STATE_FOLDER_NOTSELECTED : NextNode->ImageIndex = STATE_FOLDER_SELECTED; NextNode->StateIndex = STATE_FOLDER_SELECTED; CheckTreeEntry(NextNode); break; default: ; } break; // Sollte der Knoten als Ordner abgewählt worden sein... case STATE_FOLDER_NOTSELECTED : switch (NextNode->ImageIndex) { case STATE_FILE_SELECTED : NextNode->ImageIndex = STATE_FILE_NOTSELECTED; NextNode->StateIndex = STATE_FILE_NOTSELECTED; break; case STATE_FOLDER_SELECTED : NextNode->ImageIndex = STATE_FOLDER_NOTSELECTED; NextNode->StateIndex = STATE_FOLDER_NOTSELECTED; CheckTreeEntry(NextNode); break; default: ; } default: ; } // Nächster Knoten wird ausgewählt NextNode = Node->GetNext(); } }Leider scheint es so, dass ich nur die ersten untergeordneten Elemente dabei erreiche. Danach bleibt das aktuelle Elment, das erste des Letzten Unterordners. Ich möchhte aber alle Elemente der Unterordner erreichen.
Wie kann ich das realisieren.
Alle Unertknoten sollen ihr ImageIndex und Stateindes ändern.
-
Schon gelöst
__fastcall TForm5::CheckTreeEntry(TTreeNode* Node) { /* TreeNode * Node: Übergabe des Nodes bool bChecked: Angabe ob angewählt */ // Funktionsvariablen TTreeNode * NextNode; // Nächster Node NextNode = Node->GetNext(); while (NextNode != NULL) { // Zustandsprüfung des übergebnenen Knotens switch (Node->ImageIndex) { // ZustandsPrüfung des nächsten Knotens // Sollte Knoten als Ordner gewählt worden sein... case STATE_FOLDER_SELECTED : switch (NextNode->ImageIndex) { // Der Unterknoten wir aktviert case STATE_FILE_NOTSELECTED : NextNode->ImageIndex = STATE_FILE_SELECTED; NextNode->StateIndex = STATE_FILE_SELECTED; break; // Sollte der Unterknoten ein Ordner sein, wird dieser // aktiviert und die Funktion erneut Rekursiv aufgerufen case STATE_FOLDER_NOTSELECTED : NextNode->ImageIndex = STATE_FOLDER_SELECTED; NextNode->StateIndex = STATE_FOLDER_SELECTED; CheckTreeEntry(NextNode); break; default: ; } break; // Sollte der Knoten als Ordner abgewählt worden sein... case STATE_FOLDER_NOTSELECTED : switch (NextNode->ImageIndex) { case STATE_FILE_SELECTED : NextNode->ImageIndex = STATE_FILE_NOTSELECTED; NextNode->StateIndex = STATE_FILE_NOTSELECTED; break; case STATE_FOLDER_SELECTED : NextNode->ImageIndex = STATE_FOLDER_NOTSELECTED; NextNode->StateIndex = STATE_FOLDER_NOTSELECTED; CheckTreeEntry(NextNode); break; default: ; } default: ; } NextNode = NextNode->getNextSibling(); //Node->GetNext(); } }