CTreeView - Baum schließen

langer1801

Erfahrenes Mitglied
Hallo,
ich habe in meinem Splitter-Wnd links eine CTreeView. Dort habe ich einen Baum, in dem es drei Zweige gibt. Beim Einfügen und Löschen von Items gehe ich so vor, daß ich zunächst alle Items lösche und dann den Baum neu aufbaue, weil ich eigentlich einen Datensatz in eine Datenbank einfüge und dann den Baum neu aufbaue. Dabei gab es oft unerwartete Ergebnisse, wie der Baum hinterher vom Betriebssystem dargestellt wurde (wie die einzelnen Zweige expandiert oder geschlossen dargestellt wurden). Deshalb habe ich am Ende folgenden Code eingefügt:
Code:
	HTREEITEM hItem=leftTree.GetRootItem();
	leftTree.Expand(hItem,TVE_COLLAPSE);
Leider klappt das nur manchmal. Ich vermute mal, daß das daran liegt, daß ich drei Zweige habe. Und wahrscheinlich nur das Root-Element des Zweiges erhalte, der vorher mal angesprochen wurde. Wie kann ich erreichen, daß alle drei Zweige geschlossen werden?

Mfg

langer
 
Zuletzt bearbeitet:
Ich denke auch, dass es an den 3 parallelen Zweige liegt. Du müsstest daher jeden dieser Zweige einzeln zuklappen.
Das funktioniert evt. mit diesem Code:
Code:
HTREEITEM hItem = leftTree.GetNextItem(NULL, TVGN_CHILD);

while( hItem )
{
    leftTree.Expand(hItem,TVE_COLLAPSE);
    hItem = leftTree.GetNextSiblingItem(hItem);
}

Grüße
MCoder
 
Mich wundert's ohnehin, dass du beim Neuerstellen des Baumes aufgeklappte Strukturen hast. Löscht du den Baum eigentlich komplett ( DeleteAllItems ) oder nur einzelne (Unter)Items bzw. -Strukturen?
 
Ich habe alle Items gelöscht mit DeleteAllItems und den Baum neu aufgebaut. Trotzdem kam der Effekt. Kann aber auch sein, daß es mit meiner anderen View zusammenhängt, weil ich die dabei auch ändere und dabei auch auf den Baum zugegriffen wird. Aber jetzt, wie gesagt, klappt es.

Mfg

langer
 
Schade, klappt doch nicht so richtig. Ich kann aber auch nicht so genau ein System erkennen. Passieren tut es, wenn ich den Baum geöffnet habe und einen Datensatz lösche. Aber eben nicht immer. Oft bleibt er zugeklappt. Und welches Item danach expandiert wird, ist auch nicht so ganz klar. Irgendwie scheint das Item an der Stelle, wo das vorher gelöschte stand, zu expandieren. Aber sicher bin ich mir da nicht, weil es scheinbar ganz zufällig passiert. Muß ich noch 'ne Weile experimentieren. Oder hat jemand eine Idee, woran es liegen könnte?

Mfg

langer
 
Ich könnte mir vorstellen, dass der Baum aufklappt, wenn ein Item selektiert war, und durch das Löschen ein anderes die Selektion erhält.
 
Es ist so, daß ein Item in dem Fall selektiert ist, nämlich das Item "Löschen". Und das ist wohl auch die Ursache, denn es ist wieder das Item "Löschen" des nachfolgenden Items selektiert. Aber eben nicht immer. Manchmal kann man mehrere Löschoperationen durchführen, ohne daß der Baum wieder aufklappt, manchmal klappt er ständig auf. Ich habe versucht, durch SelectItem nach dem Einfügen des ersten Items beim Neuaufbau des Baumes die Selektion auf dieses Element zu setzen, aber das hilft auch nicht.

Mfg

langer
 
Zurück