vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Controls · ListView   |   VB-Versionen: VB4, VB5, VB606.04.01
ListView erweitern

Schnelles Ermitteln, wieviele und welche Einträge in einem ListView-Control selektiert sind.

Autor:   Wolfgang KlugeBewertung:  Views:  20.731 
www.vbwelt.deSystem:  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.
 



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.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle 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.