Hallo,
ich möchte gern meine Listview numerisch Sortieren. Normalerweise sortiert die Listview meist alphanumerisch.
Bei vb@rchiv hab ich jetzt für VB6 einen solchen Code gefunden, um das selber zu machen bin ich etwas zu sehr Anfänger.
Wie kann ich diesen Code den für Visual Basic 2005 umschreiben? Manche Codes und Anweisungen gibt es ja einfach nicht mehr und andere heißen einfach anders. Probleme zeigt mein Programm vor allem bei diesem "hWnd" und bei "String" als Befehl benutzt.
ich möchte gern meine Listview numerisch Sortieren. Normalerweise sortiert die Listview meist alphanumerisch.
Bei vb@rchiv hab ich jetzt für VB6 einen solchen Code gefunden, um das selber zu machen bin ich etwas zu sehr Anfänger.
Wie kann ich diesen Code den für Visual Basic 2005 umschreiben? Manche Codes und Anweisungen gibt es ja einfach nicht mehr und andere heißen einfach anders. Probleme zeigt mein Programm vor allem bei diesem "hWnd" und bei "String" als Befehl benutzt.
VB.NET-Quellcode
- Private Declare Function LockWindowUpdate Lib "user32.dll" ( _
- ByVal hWnd As Long) As Long
- Public Sub SortListViewColumn(ByVal Index As Integer, _
- ByVal CurrentListView As ListView)
- Dim I As Integer
- Dim strFormat As String
- Dim strData() As String
- Dim lRet As Long
- On Error GoTo ErrorHandler
- ' Benutzerdefinierter Formatstring für die
- ' Format-Funktion
- strFormat = String(30, "0") & "." & String(30, "0")
- ' Automatische Aktualisierung des Fensters sperren
- lRet = LockWindowUpdate(CurrentListView.Parent.hWnd)
- If lRet = 0& Then
- Call MsgBox("Can't lock window " & _
- CurrentListView.Parent.hWnd, _
- vbOKOnly + vbCritical)
- Exit Sub
- End If
- With CurrentListView
- With .ListItems
- If (Index > 0) Then ' Sortierung nach Subitems
- For I = 1 To .Count
- With .Item(I).ListSubItems(Index)
- ' Sichern des aktuellen Wertes der
- ' Text-Eigenschaft in der Tag-Eigenschaft,
- ' ohne einen evtl. Inhalt der Tag-Eigenschaft
- ' zu überschreiben
- .Tag = .Text & vbNullChar & .Tag
- ' Falls die Text-Eigenschaft der SubItems
- ' eine Zahl ist, so formatiere mit dem oben
- ' definierten Formatstring.
- If IsNumeric(.Text) Then
- .Text = Format$(CDbl("1" & String$(14, "0")) + CDbl(.Text), strFormat)
- End If End With
- Next I
- Else ' Sortierung nach Mainitem
- For I = 1 To .Count
- With .Item(I)
- ' Sichern des aktuellen Wertes der
- ' Text-Eigenschaft in der Tag-Eigenschaft,
- ' ohne einen evtl. Inhalt der Tag-Eigenschaft
- ' zu überschreiben
- .Tag = .Text & vbNullChar & .Tag
- ' Falls die Text-Eigenschaft der SubItems
- ' eine Zahl ist, so formatiere mit dem oben
- ' definierten Formatstring.
- If IsNumeric(.Text) Then
- .Text = Format$(CDbl(.Text), strFormat)
- End If
- End With
- Next I
- End If
- End With
- ' Sortiere die umformatierten Spalten neu
- .SortKey = Index
- .Sorted = True
- .SortOrder = 1 - .SortOrder
- With .ListItems
- If (Index > 0) Then ' Sortierung nach SubItem
- For I = 1 To .Count
- With .Item(I).ListSubItems(Index)
- ' Extrahiere den ursprünglichen Inhalt des
- ' Subitems aus der Tag Eingeschaft und
- ' stelle ihn wieder in die Text-Eigenschaft
- ' ein.
- strData = Split(.Tag, vbNullChar)
- .Text = strData(0)
- .Tag = strData(1)
- End With
- Next I
- Else ' Sortierung nach MainItem
- For I = 1 To .Count
- With .Item(I)
- ' Extrahiere den ursprünglichen Inhalt des
- ' Subitems aus der Tag Eingeschaft und
- ' stelle ihn wieder in die Text-Eigenschaft
- ' ein.
- strData = Split(.Tag, vbNullChar)
- .Text = strData(0)
- .Tag = strData(1)
- End With
- Next I
- End If
- End With
- End With
- ' Aufheben der Aktualisierungssperre für das Fenster
- lRet = LockWindowUpdate(0&)
- Exit Sub
- ErrorHandler:
- lRet = LockWindowUpdate(0&)
- Call MsgBox("Runtime error " & Err.Number & ": " & _
- vbCrLf & Err.Description, vbOKOnly + vbCritical)
- End Sub