Rubrik: Controls · ListView | VB-Versionen: VB4, VB5, VB6 | 06.04.01 |
ListView erweitern Schnelles Ermitteln, wieviele und welche Einträge in einem ListView-Control selektiert sind. | ||
Autor: Wolfgang Kluge | Bewertung: | Views: 20.731 |
www.vbwelt.de | System: Win9x, WinNT, Win2k, WinXP, Win7, Win8, Win10, Win11 | Beispielprojekt auf CD |
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:
' zunächst die benötigten API-Deklarationen 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 Private Const LVM_FIRST = &H1000 Private Const LVM_GETNEXTITEM = (LVM_FIRST + 12) Private Const LVM_GETSELECTEDCOUNT = (LVM_FIRST + 50) Private Const LVNI_SELECTED= &H2
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 selektierten Einträgen:
' alle selektierten Einträge zurückgeben Dim LV_Count As Long Dim LV_Index As Long With ListView1 LV_Index = -1 LV_Count = SendMessage(.hwnd, LVM_GETSELECTEDCOUNT, _ 0&, 0&) For i = 1 To LV_Count LV_Index = SendMessage(.hwnd, LVM_GETNEXTITEM, _ LV_Index, ByVal LVNI_SELECTED) If LV_Index <> -1 Then ' Hier Bearbeiten der zurückgegebenen Werte... .ListItems.Item(LV_Index + 1).Bold = True End If Next End With
Der Beispielscode demonstriert das Ermitteln aller selektierten ListView-Einträge und stellt diese in Fettdruck dar.