vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Fortgeschrittene Programmierung
Re: 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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
ListView & DragnDrop78Stift21.11.01 05:48
Re: ListView & DragnDrop129Tolwyn21.11.01 12:15
Re: ListView & DragnDrop47Stift21.11.01 23:27
Immer wieder gerne (ot)39Tolwyn22.11.01 16:26

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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