Mehrere Items in CTreeCtrl löschen



  • Hallo Leute,

    wie kann ich in einem CTreeCtrl die ChildItems eines Items ganz löschen.
    so klappt das nicht, da dann das erste Chilitem beim nächsten durchlauf weg ist.

    CString m_strName;
    	HTREEITEM hCurrent = GetTreeCtrl().GetNextItem(TVI_ROOT, LVNI_ALL);  //zum anfang 
    
    	while (hCurrent != NULL) //solange nicht ende erreicht 
    	{
    		m_strName = GetTreeCtrl().GetItemText(hCurrent);
    		if(m_strName == "Server")
    		{
    			if (GetTreeCtrl().ItemHasChildren(hCurrent)) 
    			{ 
    				HTREEITEM hItem = GetTreeCtrl().GetChildItem(hCurrent);
    
    				while (hItem != NULL) 
    				{ 					
    					GetTreeCtrl().DeleteItem(hItem);
    					hItem = GetTreeCtrl().GetNextSiblingItem(hItem); 
    				} 
    
    			} 
    		}
    		m_strName = "";
    
    		hCurrent = GetTreeCtrl().GetNextItem(hCurrent, TVGN_NEXT); //versuche nächstes 
    	}
    

    Kann mir jemand helfen ??

    Gruß
    andy_mann



  • Hallo!

    So wie ich das sehe ist es ein recursives Problem.

    Mach doch eine Funktion, die z.B. so aussieht:

    boolean DeleteChild (HTREEITEM hCurrent)
    {
        boolean rValue = true;
        if (hCurrent) //Also verfügbar
        {
            if (GetTreeCtrl().ItemHasChildren(hCurrent)) 
            { 
                HTREEITEM hItem;
                while (hItem = GetTreeCtrl().GetChildItem(hCurrent))
                {
                    rValue = DeleteChild(hItem);
                }
            }
            GetTreeCtrl().DeleteItem(hCurrent);
        }
        return rValue;    //Kannst ja irgendwelche fahler abfangen, und dann auf false setzen.
    }
    

    Kann sein, dass noch ein paar Fehler drinn sind, aber so in etwa sollte es gehen. (Falls ich das problem richtig erkannt habe.



  • Vielen Dank,

    leider funktioniert es nur zum teil.

    Er löscht jetzt nur immer einen.
    Ich brauche aber dass bei dem Item "Server" der Childitems hat diese alle gelöscht werden.

    Alle anderen Items sollen nicht berücksichtigt werden.

    - Test
    - Server
    |_ Server 1
    |_ Server 2
    |_ usw.
    - Test 2

    Gruß
    andy_mann


Anmelden zum Antworten