vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2015
 
zurück
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:     [ Jetzt bewerten ]Views:  15.022 
www.vbwelt.deSystem:  Win9x, WinNT, Win2k, WinXP, Vista, Win7, Win8 Beispielprojekt auf CD 

Summer-Special bei Tools & Components!
Gute Laune Sommer bei Tools & Components
Top Summer-Special - Sparen Sie teilweise über 100,- EUR
Alle sev-Entwicklerkomponenten und Komplettpakete jetzt bis zu 25% reduziert!
zum Beispiel:
  • Developer CD nur 455,- EUR statt 569,- EUR
  • sevDTA 2.0 nur 224,30 EUR statt 299,- EUR
  •  
  • vb@rchiv   Vol.6 nur 18,70 EUR statt 24,95 EUR
  • sevCoolbar 3.0 nur 58,70 EUR statt 69,- EUR
  • - Werbung -Und viele weitere Angebote           Aktionspreise nur für kurze Zeit gültig

    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.
     

    Dieser Tipp wurde bereits 15.022 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-2015 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