| |

Fortgeschrittene ProgrammierungRe: ListView & DragnDrop | |  | Autor: Tolwyn | Datum: 21.11.01 12:15 |
| Hi,
keine bange, geht alles(fast). Ich würde das mit einer separaten Sortierungsspalte realisieren. Versuchs mal folgendermaßen:
Mein ListView hieß lsvListView. Der Rest interessiert erst mal nicht. Rufe zu Beginn die Funktion cmdManSort_Click auf, bzw. mach all das in Deinem Form Load oder an passender Stelle. Dann werden Nur noch die Funktionen "lsvListView_OLEDragDrop" und "lsvListView_OLEDragOver" benötigt.
Option Explicit
' Subitem der Sortierungsspalte
Private lManSort As Long
Private Sub cmdManSort_Click()
' Sortierungs Spalte einrichten
' Vorbereitung des LSV etc.
Dim i As Long
lsvListView.ColumnHeaders.Add , "Sort", "Sort", 0
lManSort = lsvListView.ColumnHeaders.Item("Sort").Index - 1
For i = 1 To lsvListView.ListItems.Count
lsvListView.ListItems(i).SubItems(lManSort) = Format(i, "00000")
Next
lsvListView.Sorted = True
lsvListView.SortKey = lManSort
lsvListView.SortOrder = lvwAscending
' FullRowSelect muss nicht unbedingt True sein, aber
' es ist empfehlenswert
lsvListView.FullRowSelect = True
lsvListView.OLEDragMode = ccOLEDragAutomatic
lsvListView.OLEDropMode = ccOLEDropManual
End Sub
Private Sub lsvListView_OLEDragDrop(Data As MSComctlLib.DataObject, _
Effect As Long, Button As Integer, Shift As Integer, _
x As Single, y As Single)
Dim i As Long
Dim lCount As Long
Dim oDragItem As ListItem
Dim oDropItem As ListItem
'--------------------------------------------------
On Error GoTo Error_
Set oDragItem = lsvListView.SelectedItem
Set oDropItem = lsvListView.HitTest(x, y)
'--------------------------------------------------
If Not oDropItem Is Nothing Then
' Nur wenn über einem anderen ListItem
If oDragItem.SubItems(lManSort) < oDropItem.SubItems(lManSort) Then
'--------------------------------------------------
' DragItem kommt vor dem DropItem
lCount = oDragItem.SubItems(lManSort)
For i = oDragItem.Index + 1 To oDropItem.Index
lsvListView.ListItems(i).SubItems(lManSort) = Format(lCount, "00000")
lCount = lCount + 1
Next i
oDragItem.SubItems(lManSort) = Format(lCount, "00000")
'--------------------------------------------------
ElseIf oDragItem.SubItems(lManSort) > oDropItem.SubItems(lManSort) Then
'--------------------------------------------------
' DragItem kommt nach dem DropItem
lCount = oDropItem.SubItems(lManSort) + 1
oDragItem.SubItems(lManSort) = Format(lCount, "00000")
For i = oDropItem.Index + 1 To oDragItem.Index - 1
lCount = lCount + 1
lsvListView.ListItems(i).SubItems(lManSort) = Format(lCount, "00000")
Next i
'--------------------------------------------------
End If
lsvListView.Sorted = True
End If
Exit Sub
Error_:
Debug.Print Err.Number
Debug.Print Err.Description
End Sub
Private Sub lsvListView_OLEDragOver(Data As MSComctlLib.DataObject, _
Effect As Long, Button As Integer, Shift As Integer, _
x As Single, y As Single, State As Integer)
'Debug.Print "OLEDragOver"
Dim oItem As ListItem
Set oItem = lsvListView.HitTest(x, y)
If Not oItem Is Nothing Then
oItem.EnsureVisible
End If
End Sub
Private Sub lsvListView_OLEStartDrag(Data As MSComctlLib.DataObject, _
AllowedEffects As Long)
Debug.Print "OLEStartDrag"
'Debug.Print Data.GetFormat(
End Sub Gruß
Tolwyn |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
Neu! sevEingabe 3.0 
Einfach stark!
Ein einziges Eingabe-Control für alle benötigten Eingabetypen und -formate, inkl. Kalender-, Taschenrechner und Floskelfunktion, mehrspaltige ComboBox mit DB-Anbindung, ImageComboBox u.v.m. Weitere InfosTipp des Monats Oktober 2025 Matthias KozlowskiUmlaute konvertierenErsetzt die Umlaute in einer Zeichenkette durch die entsprechenden Doppelbuchstaben (aus ä wird ae, usw.) Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|