Det skall finnas ett API eller ett SendMessage för att sortera värden i en listviewkontroll. Någon som sett detta? prova detta.. lägg till en lista och ett textfält på ett formulär och Denna kodsnutt finns i en fil under Resource Library under en rubrik som heter "Kurs om listview" Förutsatt att du bara har posetiva värden. Så är det enklaste att lägga till mellanslag framför talet. Vilket får den inbyggda strängsorteringen att fungera. Detta bör ej påverka utseendet, antar att kolumnen är höger justerad. Går även att lösa för negativa tal med ett annat "vit" tecken.Sortera i en listview
Observera - det är numeriska värden som det gäller. Sv: Sortera i en listview
använd följande kod
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Const LB_FINDSTRING = &H18F
Private Sub Form_Load()
With List1
.AddItem "Computer"
.AddItem "Screen"
.AddItem "Modem"
.AddItem "Printer"
.AddItem "Scanner"
.AddItem "Sound Blaster"
.AddItem "Keyboard"
.AddItem "CD-Rom"
.AddItem "Mouse"
End With
End Sub
Private Sub Text1_Change()
'Retrieve the item's listindex
List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Text1.Text))
End SubSv: Sortera i en listview
Hur den fungerar vet jag ej
Placera denna kod i en Modul
const LVM_FIRST = &H1000
const LVM_SORTITEMS = (LVM_FIRST + 48)
Public Function ListView_SortItems(hwndLV As Long, pfnCompare As Long, lParamSort As Long) As Boolean
ListView_SortItems = SendMessage(hwndLV, LVM_SORTITEMS, ByVal lParamSort, ByVal pfnCompare)
End FunctionSv: Sortera i en listview
Exempel:
Private Sub Form_Load()
Dim Tal As Double
Dim Item As ListItem
Dim Index As Integer
Dim sText As String * 10
For Index = 1 To 100
Set Item = ListView1.ListItems.Add(, , "Item: " & Index)
Randomize
Tal = Rnd * 100
RSet sText = Format$(Tal, "0.00")
Item.SubItems(1) = sText
Next
End SubSv: Sortera i en listview
Exemepel:
Private Sub Form_Load()
Dim Tal As Double
Dim Item As ListItem
Dim Index As Integer
Dim sText As String * 10
Dim HighSpace As String
HighSpace = Chr(160)
For Index = 1 To 100
Set Item = ListView1.ListItems.Add(, , "Item: " & Index)
Randomize
Tal = (Rnd * 100) - 50
RSet sText = Format$(Tal, "0.00")
If Tal < 0 Then
Item.SubItems(1) = sText
Else
Item.SubItems(1) = HighSpace & sText
End If
Next
End Sub