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();
    
    	}
    
    }
    

Anmelden zum Antworten