Jag har satt multiselection till true i ListView-controllen (ReportView) i VB och skulle vilja komma åt de selecterade raderna och spara dem i en array. Problemet är hur man kommer åt de rader som användaren har selecterat?? Om användaren endast väljer en rad går det att komma åt den med SelectedItem... Jag tycker att det borde finnas en metod el liknande (typ SelectedItems) som returnerar valda rader till en array. Är det någon som har erfarenhet av detta?? Dim Item As ListItem Andreas för några veckor sedan gnydde du en hel del om kod som inte var optimerad för hastighet. Så sitter du här och ger exempel på kod som innehåller redim...... Asså den tar tid.... Jag ber hemskt mycket om ursäkt. Jag försökte bara svara på frågan. Förlåt det var inte meningen att skriva inefektiv kod... Hur komma åt valda rader i en ListView med multiselect??
/Tack på förhandSv: Hur komma åt valda rader i en ListView med multiselect??
Dim Values() As String
Dim Count As Long
ReDim Values(1 To ListView1.ListItems.Count)
For Each Item In ListView1.ListItems
If Item.Selected Then
Count = Count + 1
Values(Count) = Item.Key
End If
Next
ReDim Preserve Values(1 To Count)Sv: Hur komma åt valda rader i en ListView med multiselect??
/peterhSv: Hur komma åt valda rader i en ListView med multiselect??
Får väl optimera lite...
Private Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const LVM_FIRST = &H1000
Private Const LVM_GETSELECTEDCOUNT = (LVM_FIRST + 50)
Public Function GetSelected(Listview As Listview) As String()
Dim Item As ListItem
Dim SelectedCount As Long
Dim Index As Long
SelectedCount = SendMessageLong(Listview.hwnd, LVM_GETSELECTEDCOUNT, 0&, 0&)
If SelectedCount > 0 Then
ReDim Values(1 To SelectedCount) As String
For Each Item In ListView1.ListItems
If Item.Selected Then
Index = Index + 1
Values(Index) = Item.Key
End If
Next
GetSelected = Values
End If
End Function