ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 04.09.2000

Diese Seite wurde zuletzt aktualisiert am 04.09.2000
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Gewählte Sammlungen

Zurück...


Anzeige

(-hg) mailto:hg_listviewselection@aboutvb.de

Wie eine ListBox bietet das ListView-Steuerelement aus den Microsoft Common Controls auch die Einstellung MultiSelect an. Eine SelCount-Eigenschaft wie bei der ListBox ist jedoch nicht vorhanden. Mit einer über die API-Funktion MSDN Library - API SendMessageSendMessage an das ListView-Steuerelement gesendete Nachricht LVM_GETSELECTEDCOUNT können Sie jedoch die Anzahl der gewählten Elemente jederzeit ermitteln:

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

Public Function ListViewSelCount(ListView As ListView) As Long
  Const LVM_GETSELECTEDCOUNT = &H1032
  
  ListViewSelCount = SendMessage(ListView.hwnd, _
   LVM_GETSELECTEDCOUNT, 0&, 0&)
End Function

Über die Nachricht LVM_GETSELECTIONMARK können Sie den Index des ersten gewählten ListItems in Erfahrung bringen. Da abweichend von der Index-Handhabung in Visual Basic der Index bei 0 beginnend gezählt wird, ist der Rückgabewert um 1 zu erhöhen. Da aber nicht nur für das erste ListItem der Rückgabewert 0 ist, sondern auch 0 zurückgegeben wird, wenn gar kein ListItem ausgewählt ist, muss zuvor die Anzahl der gewählten Elemente ermittelt werden.

Public Function ListViewSelStartIndex(ListView As ListView) _
 As Long

  Dim nListViewSelStartIndex As Long
  
  Const LVM_GETSELECTIONMARK = &H1042
  
  nListViewSelStartIndex = SendMessage(ListView.hwnd, _
   LVM_GETSELECTIONMARK, 0&, 0&)
  If ListViewSelCount(ListView) Then
    ListViewSelStartIndex = nListViewSelStartIndex + 1
  End If
End Function

Die folgende Variante derselben Funktion gibt nicht den Index, sondern gleich das betreffende ListItem zurück:

Public Function ListViewSelStartItem(ListView As ListView) _
 As ListItem

  Dim nListViewSelStartIndex As Long
  
  Const LVM_GETSELECTIONMARK = &H1042
  
  nListViewSelStartIndex = SendMessage(ListView.hwnd, _
   LVM_GETSELECTIONMARK, 0&, 0&)
  If ListViewSelCount(ListView) Then
    Set ListViewSelStartItem = _
     ListView.ListItems(nListViewSelStartIndex + 1)
  End If
End Function

Nun fehlt nur noch eine Auflistung bzw. Sammlung (Collection) der markierten Elemente. Hier bietet das API keine Unterstützung. Sie müssen bei jedem einzelnen ListItem prüfen, ob es gewählt ist, und es dann in eine neue Collection einfügen. Damit bei einer großen Anzahl von ListItems die ListItems-Collection nicht unnötig durchlaufen werden muss, falls gar kein ListItem gewählt ist, wird auch hier anhand der Anzahl unterschieden. Sie können beim Zusammenstellen der Collection dafür sorgen, dass die Auswahl der zuvor gewählten ListItems sogleich aufgehoben wird, indem Sie im optionalen Parameter Unselect den Wert True übergeben.

Public Function ListViewSelectedItems(ListView As ListView, _
 Optional ByVal Unselect As Boolean) As Collection

  Dim nSelectedItems As Collection
  Dim nListItem As ListItem
  
  Set nSelectedItems = New Collection
  If ListViewSelCount(ListView) Then
    With nSelectedItems
      On Error Resume Next
      For Each nListItem In ListView.ListItems
        If nListItem.Selected Then
          If Unselect Then
            nListItem.Selected = False
          End If
          .Add nListItem, nListItem.Key
          If Err.Number Then
            Err.Clear
            .Add nListItem
          End If
        End If
      Next 'i
    End With
  End If
  Set ListViewSelectedItems = nSelectedItems
End Function

Wollen Sie die Auswahl erst später aufheben, ist das auch kein Problem. Die folgende Prozedur sorgt dafür, wenn Sie ihr die zuvor gewonnene Collection übergeben:

Public Sub ListViewUnselectItems(SelectedItems As Collection)
  Dim nListItem As ListItem
  
  For Each nListItem In SelectedItems
    nListItem.Selected = False
  Next
End Sub

Modul modListViewSelection.bas (modListViewSelection.bas - ca. 2,4 KB)


Artikel
Zum Download-Bereich dieses Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche



Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer