Laden...

Treeview Node zwischen 2 Nodes einfügen

Erstellt von Charly vor 3 Jahren Letzter Beitrag vor 3 Jahren 802 Views
C
Charly Themenstarter:in
31 Beiträge seit 2014
vor 3 Jahren
Treeview Node zwischen 2 Nodes einfügen

Moin moin,

Situation:

ich habe ein TreeView um eine eigene Klasse erweitert, um zusätzliche Informationen aufzunehmen. Dabei gibt es Ordner und normale Einträge. Die können per Drag & Drop oder mit den Cursortasten hoch und runter verschoben werden. Wenn ich einen Node auf einen anderen ziehe sortiere ich die Node genau an der Stelle ein wo sie hingezogen wurde.

Problem:

Jetzt kennt man das aber aus anderer Software dass dann ein Strich angezeigt wird, ob man den Eintrag ÜBER oder UNTER dem Eintrag einfügen möchte worüber man gerade hovert. Wie ich den Eintrag davor oder dahinter einordnen müsste ist klar.

Wie könnte ich zwischen den Elementen einen Strich anzeigen, um zu visualisieren wo der Eintrag hinterher eingeordnet wird ?

Meine Idee : NodeMouseHover:

So wie ich sehe hat das NodeMouseHover Event die X, Y, Breite und Höhe des Nodes über dem ich hover. Wenn ich das gegen die Mausposition abgleiche könnte ich ja die Höhe teilen, um zu schauen ob ich davor oder dahinter einsortieren soll. Das Event tritt auch ein wenn Drag & Drop nicht aktiv ist - das kann man aber abfragen.

Frage:
Wie kann ich das visualisieren indem ich unter oder über dem Node z.B. einen Strich einblende ? Gibt's da eine "einfache" Lösung oder muss ich mich in die Draw & Paint Ereignisse mit einklinken ?

4.939 Beiträge seit 2008
vor 3 Jahren

Du meinst so ähnlich wie in Drag and Drop List View?
Den Source-Code dort halte ich jedoch nicht für gut (da direkt per CreateGraphics gezeichnet wird) und du ja schon richtigerweise erwähnt hast, daß man dazu dann das Ereignis Paint (sowie DrawNode bei einem TreeView) benutzen soll, aber du kannst dir ja trotzdem die generelle Logik daraus übernehmen (auch wenn einiges verbessert und optimiert werden kann, wie z.B. das Zeichnen der Linie in eine eigene Methode auszulagern).

s.a. [Tutorial] Zeichnen in Windows-Forms-Programmen (Paint/OnPaint, PictureBox) (falls du es noch nicht kennst)

C
Charly Themenstarter:in
31 Beiträge seit 2014
vor 3 Jahren

Jep genau in dem Stil. Nach Listviews habe ich nicht gegoogled - aber das Prinzip ist das gleiche.

Ich schaue es mir mal an wie die das gemacht haben. Danke Dir.

*EDIT*

Für Leute die ähnliches suchen - ich habe es wie in dem Beispiel gelöst. Ich habe das DragOver Event des TreeViews genommen und habe die Mausposition ermittelt. Dann habe ich geschaut wo die Y Position prozentual auf dem Item ist (oben = 0% , unten = 100%) und habe dann mit Graphics reingezeichnet.