Entwickler-Ecke

WinForms - Elemente einer ListView-Control mit der Maus verschieben


pimpl - Do 06.09.12 15:15
Titel: Elemente einer ListView-Control mit der Maus verschieben
Guten Tag!

Ich habe eine ListView bei welcher ich die in ihr enthaltenen Elemente entsprechend der Mausbewegung verschieben möchte, wenn die linke Maustaste gehalten wird.
(genauso, wie es beim Windows-Explorer möglich ist). Ich habe jedoch keine Ahnung, wie ich das anstellen soll!

Ich habe daran gedacht die Mausposition in ein Point-Objekt abzuspeichern, wenn ein ListView-Element ausgewählt ist und die linke Maustaste gedrückt ist.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
private Point mausPosition;  //enthält die Absolutkoordinaten der Mausspitze

        /*wird beim Drücken der linken Maustaste ausgelöst*/
        private void Form1_MouseDown(object sender, MouseEventArgs e)
        {
            mausPosition = new Point(-e.X, -e.Y);
        }


Nun weiß ich aber nicht weiter und bin für Anregungen sehr dankbar!


Ralf Jansen - Do 06.09.12 17:55

Zitat:
Ich habe daran gedacht die Mausposition in ein Point-Objekt abzuspeichern,


Warum?

Um eine Drag&Drop Operation zu starten solltest du dir dafür vorgesehen Events verdrahten (fangen alle mit Drag... an) . Wie genau und welche hängt davon ab was Start und Ziel der Drag&Drop Operation sein soll. Also von außerhalb in die Anwendung, von der Anwendung nach außerhalb, innerhalb der Anwendung zwischen Controls, innerhalb eines Controls?


pimpl - Fr 07.09.12 14:15

Das Ziel ist es die Elemente einer ListView innerhalb dieser zu verschieben - also letzlich die Indices der ListView-Elemente in Abhängigkeit der Mausposition zu verändern.
Wird ein Element innerhal der ListView also ganz nach oben gezogen, soll es den Index 0 erhalten, usw.

Habe mal im Internet nach anregungen gesucht, jedoch nichts für mich brauchbares gefunden..


Th69 - Fr 07.09.12 17:03

Hallo pimpl,

bei CodeProject gibt es z.B. zwei Artikel darüber:
Drag and Drop List View [http://www.codeproject.com/Articles/7034/Drag-and-Drop-List-View]
Drag and Drop ListView row reordering [http://www.codeproject.com/Articles/4576/Drag-and-Drop-ListView-row-reordering]


pimpl - Mo 10.09.12 11:50

Das ist eigentlich genau das, wonach ich suche, jedoch kann ich die beschriebenen Schritte nicht ausführen!

beispielsweise kennt mein VS2010 folgende Befehle nicht:

C#-Quelltext
1:
2:
3:
base.DoDragDrop(GetDataForDragDrop(), DragDropEffects.Move);

base.OnItemDrag(e);

u.s.w.

Ich kann die Projektdatei auch nicht öffnen, ohne diese zu konvertieren. Nach der Konvertierung läuft jedoch garnichts.
Gibt es das Projekt auch für die neueren Versionen von VS? Oder wie kann ich das Beispiel nachvollziehen bzw. anwenden?

Moderiert von user profile iconTh69: Quote- durch C#-Tags ersetzt


pimpl - Mi 12.09.12 12:58

Ich habe es jetzt komplett anders gelöst und es funktioniert.
Dennoch, vielen Dank für die Anregungen!