Treeview - Order-Eigenschaft

Hallo wer-weiss-wasser,

Ich hab ein echtes Problem mit der TreeView:
Entweder ich bin zu blöd (was ich nicht hoffen will) oder die TreeView ist unvollkommen (was auch unschön wäre) aber erstmal das Problem:

Ich habe in einem Programm eine Treeview, in der befinden sich mehrere (um nicht zu sagen: ein menge) nodes, auch in mehreren ebenen.
Jetzt möchte ich eine Funktionalität einbauen, die die Sortierung der Nodes zwischen Alphabetisch und „Ursprünglich“ umschaltet.

Ok, alphabetisch einschalten ist kein Problem, for each node in nodes node.order=true usw…
Macht er auch alles wunderbar…
Aber: Ich möchte jetzt die alphabetische Sortierung wieder ausschalten. Also alle order=false setzen.
Aber das reicht nicht. Zwar werden jetzt neue Elemente nicht mehr einsortiert, aber die alten bleiben so stehen.

Die ursprüngliche Sortierung geht aus den Keys der Nodes hervor, also ist sie auch wieder per hand rekonstuierbar.
Das Problem stellt sich jetzt wie folgt dar:
Wie kann ich einen Node innerhalb einer Ebene verschieben? angenommen er steht in der mitte von 3 Nodes derselben Ebene; wie kann ich ihn ans ende stellen?
Dabei ist aber wichtig, das der Node verschoben wird; nicht etwa lediglich seine beschriftung (denn der Zugriff erfolgt per Key).
Außerdem sollen ja auch alle seine Childs mitgenommen werden.

Tja, an dieser vertrackten Situation hab ich mir bisher die Zähne ausgebissen.
Ach ja, ich habe schon eine Menge ausprobiert, zB über die next und previous property zu ändern, aber diese beiden sind (wie so viele beim treeview) read-only.

ich danke euch schon mal im Voraus vielmals, und hoffe auf eine antwort,
Gruß,
Tom

Hallöchen,
habe folgendes festgestellt:
…nämlich, dass sich die Index-Reihenfolge trotz ‚Sorted=true‘ nicht geändert hat.

Dim l As Long
'
With Me.TreeView1
 Debug.Print "\>\>\>\>\>\>\>\>\>\>\>\>\>"
 For l = 1 To .Nodes.Count
 Debug.Print .Nodes.Item(l).text
 Next l
' 
 For l = 1 To .Nodes.Count
 .Nodes.Item(l).Sorted = True
 Next l
' 
 Debug.Print "--------------"
 For l = 1 To .Nodes.Count
 Debug.Print .Nodes.Item(l).text
 Next l
 Debug.Print "d.h. Du könntest Dir ein verstecktes Treeview zur Hilfe nehmen und den "Original-Nodes-Aufbau" dort wieder herstellen um ihn dann wieder auf das eigentliche Treeview wieder einzuspielen. Wenn Du die Treeview's auf 'Enabled=False' bzw. 'Visible=False' setzt, dann wird das recht hurtig funktionieren.

Mit dem Property '.Parent' lässt sich dann auch feststellen, ob es ein Root (=Nothing) oder ein Child (=Node) war ... damit sollte sich der Baum dann eigentlich rekonstruieren lassen .... glaube ich mal!!

greets from michL

Hi michl,

nette Anregung mit den zwei Treeviews, ist sogar eine gute Idee :wink:
aber was dann doch aufwendiger wird, ist die abgleichung farbiger Nodes und welche nodes expanded sind u.ä.

Aber ich habe wohl selbst eine möglichkeit gefunden; Wenn man die Parent-eigenschaft neu setzt, zwar auf denselben parent, dann wird der node ganz oben wieder eingesetzt :smile:

also kann ich so mit ein wenig aufwand doch eine sortierung vornehmen…

gruß,
tom