ListView erweitern
 Info  
Von : Wolfgang Kluge
 Zusatz  
Printfreundliche Ansicht
Das ListView - Control : Ein sehr schönes, Windows-Konformes und umfangreiches Control...nur leider haben die Entwickler sich nicht genug gedanken um die VB-Programmierer-Garde gemacht...

Anders sind zumindest die Fehlenden Methoden nicht zu erklären...
Eine davon ist, herauszufinden, welche und wieviele Einträge im Moment gerade selektiert sind. Zwar kann man immer durch die ganze Auflistung mit einer For...Each - Schleife auch dies herausfinden, allerdings ist diese Lösung schon bei 10 Einträgen mühselig langsam.

Schneller, und vor allem einfacher geht dies mittels API und einigen Konstanten.

 Deklaration:
Private Const LVM_FIRST = &H1000
Private Const LVM_GETNEXTITEM = (LVM_FIRST + 12)
Private Const LVM_GETSELECTEDCOUNT = (LVM_FIRST + 50)

Private Const LVNI_SELECTED= &H2

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long


Dies reicht schon für die erste Anforderung aus.

Um herauszufinden, wieviele Einträge selektiert sind, reicht ein ausruf der Nachricht LVM_GETSELECTEDCOUNT.
' Anzahl der selektierten Einträge
Dim LV_Count As Long
LV_Count = SendMessage(ListView1.hwnd, LVM_GETSELECTEDCOUNT, 0&, 0&)


Weiter geht´s mit dem herausfinden von allen Einträgen, die selektiert sind.
' alle selektierten Einträge zurückgeben
Dim LV_Count As Long, LV_Index As Long, i As Long
LV_Index = -1
LV_Count = SendMessage(ListView1.hwnd, LVM_GETSELECTEDCOUNT, 0&, 0&)
For i = 1 To LV_Count
  LV_Index = SendMessage(ListView1.hwnd, LVM_GETNEXTITEM, LV_Index, ByVal LVNI_SELECTED)
  If LV_Index <> -1 Then
    ' Hier bearbeiten der zurückgegebenen Werte...
    ListView1.ListItems.Item(LV_Index + 1).Bold = True
  End If
Next