vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück
Rubrik: Controls · ListView   |   VB-Versionen: VB5, VB619.11.07
ListView-Einträge nach oben/unten verschieben

Mit diesem Code lässt sich ein kompletter ListView-Eintrag innerhalb der Liste nach oben bzw. nach unten verschieben.

Autor:   Dieter OtterBewertung:     [ Jetzt bewerten ]Views:  11.035 
www.tools4vb.deSystem:  Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 Beispielprojekt auf CD 

Immer wieder taucht die Frage auf, wie sich ein ListView-Eintrag um eine Position nach oben bzw. nach unten verschieben lässt. Eine Möglichkeit wäre sich alle Einstellungen des aktuell selektierten ListView-Eintrags zu merken, dann das ListItem-Objekt aus der Liste zu löschen und an der gewünschten Position neu einzufügen.

Fügen Sie Ihrem Projekt zunächst nachfolgende Klasse hinzu und benennen Sie diese "lvItem". Durch Aufruf der "Save"-Prozedur merkt sich die Klasse alle Eigenschaften des übergebenen ListView-Items einschl. der SubItems-Objekte. Anschließend kann man den Eintrag im ListView löschen. Danach fügt man dem ListView an der gewünschten Position einen neuen Eintrag hinzu und ruft anschließend die "Restore"-Prozedur der Klasse mit dem neu hinzugefügten ListItem-Objkekt auf.

Klasse "lvItem"

Option Explicit
 
' Eigenschaften des ListItem-Objekts
Private m_Bold As Boolean
Private m_Checked As Boolean
Private m_ForeColor As Long
Private m_Ghosted As Boolean
Private m_Icon As Long
Private m_Key As String
Private m_SmallIcon As Long
Private m_Tag As Variant
Private m_Text As String
Private m_ToolTipText As String
 
Private m_ListSubItemsCount As Long
Private m_SubItems() As SubItem
 
' Eigenschaft der einzelnen SubItem-Objekte
Private Type SubItem
  Bold As Boolean
  ForeColor As Long
  Key As String
  ReportIcon As Long
  Tag As Variant
  Text As String
  ToolTipText As String
End Type
' Speichern aller Eigenschaften des übergebenen ListItem-Objekts
Public Sub Save(oItem As MSComctlLib.ListItem)
  Dim i As Long
 
  With oItem
    m_Text = .Text
    m_Key = .Key
    m_Icon = .Icon
    m_SmallIcon = .SmallIcon
    m_Checked = .Checked
    m_Bold = .Bold
    m_ForeColor = .ForeColor
    m_Ghosted = .Ghosted
    m_ToolTipText = .ToolTipText
    m_Tag = .Tag
 
    m_ListSubItemsCount = .ListSubItems.Count
    ReDim m_SubItems(m_ListSubItemsCount)
    For i = 1 To .ListSubItems.Count
      With .ListSubItems(i)
        m_SubItems(i).Bold = .Bold
        m_SubItems(i).ForeColor = .ForeColor
        m_SubItems(i).Key = .Key
        m_SubItems(i).ReportIcon = .ReportIcon
        m_SubItems(i).Tag = .Tag
        m_SubItems(i).Text = .Text
        m_SubItems(i).ToolTipText = .ToolTipText
      End With
    Next i
  End With
End Sub
' Wiederherstellen der "gespeicherten" Eigenschaften
Public Function Restore(oItem As MSComctlLib.ListItem)
  Dim i As Long
 
  With oItem
    .Text = m_Text
    .Key = m_Key
    .Icon = m_Icon
    .SmallIcon = m_SmallIcon
    .Checked = m_Checked
    .Bold = m_Bold
    .ForeColor = m_ForeColor
    .Ghosted = m_Ghosted
    .ToolTipText = m_ToolTipText
    .Tag = m_Tag
 
    For i = 1 To m_ListSubItemsCount
      If .ListSubItems.Count < i Then .ListSubItems.Add
      With .ListSubItems(i)
        .Bold = m_SubItems(i).Bold
        .ForeColor = m_SubItems(i).ForeColor
        .Key = m_SubItems(i).Key
        .ReportIcon = m_SubItems(i).ReportIcon
        .Tag = m_SubItems(i).Tag
        .Text = m_SubItems(i).Text
        .ToolTipText = m_SubItems(i).ToolTipText
      End With
    Next i
  End With
End Function

Nachfolgend der Code zum Verschieben des aktuell selektierten ListView-Eintrags um eine Position nach oben:

' aktuellen ListView-Eintrag eine Position nach oben
Dim Index As Long
Dim oItem As ListItem
Dim lvItem As New lvItem
 
With ListView1
  Index = .SelectedItem.Index
  If Index > 1 Then
    ' alle Eigenschaften "merken"
    lvItem.Save .SelectedItem
 
    ' Eintrag löschen
    .ListItems.Remove Index
 
    ' Eintrag 1 Position weiter oben wieder einfügen
    Set oItem = .ListItems.Add(Index - 1)
 
    ' ursprüngliche Eigenschaften wiederherstellen
    lvItem.Restore oItem
  End If
End With

Und jetzt noch der Code zum Verschieben des aktuell selektierten Eintrags um eine Position nach unten:

' aktuellen ListView-Eintrag eine Position nach unten
Dim Index As Long
Dim oItem As ListItem
Dim lvItem As New lvItem
 
With ListView1
  Index = .SelectedItem.Index
  If Index < .ListItems.Count Then
    ' alle Eigenschaften "merken"
    lvItem.Save .SelectedItem
 
    ' Eintrag löschen
    .ListItems.Remove Index
 
    ' Eintrag 1 Position weiter unten wieder einfügen
    Set oItem = .ListItems.Add(Index + 1)
 
    ' ursprüngliche Eigenschaften wiederherstellen
    lvItem.Restore oItem
  End If
End With

Dieser Tipp wurde bereits 11.035 mal aufgerufen.

Voriger Tipp   |   Zufälliger Tipp   |   Nächster Tipp

Über diesen Tipp im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Tipp, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Neue Diskussion eröffnen

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6
(einschl. Beispielprojekt!)

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2024 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