Hur sorterar jag en Listbox med klockslag. Jag vill ha det senaste klockslaget längst upp. T.ex. Jag skulle lösa det efter denna princip. Varför kan man inte bara ha en ListBox där Sorted = True ? mmm... Så var det. :-o Jag tänkte för att komma med en listig lösning. Hittade den här som funkade perfekt och som vänder sorteringen i en Listbox Ja det var en snygg variant. En fan så mycket enklare variant än att sitta och mecka med en bubblesort är ta den sorterade och vända den: mmm.... härligt att man får medhåll ibland.Sortera en listbox
20:15:12
20:14:00
20:11:22
20:10:45
Jag skulle kunna skriva in List1.AddItem "20:12:12" ,0
Då hamnar alltid det senaste högst upp. men skulle jag skriva in ett klockslag som ligger emellan några andra vill jag att det ska komma in på sin rätta plats.Sv: Sortera en listbox
Tillverka en Dummy Listbox Visible = False och Sorted = True
I mitt ex är det List1 som är Dummy
List2 den du visar skall vara Sorted = False
<code>
Option Explicit
Private Sub Form_Load()
'List1.Visible = False
'List1.Sorted = True
' List2.Sorted = False och givetvis Visible True
'Bara för att testa
List1.AddItem "11:28:06"
List1.AddItem "01:12:41" 'obs måste skrivas 01: 02: osv.
List1.AddItem "20:20:19"
List1.AddItem "20:18:43"
List1.AddItem "20:15:12"
List1.AddItem "20:14:00"
List1.AddItem "20:11:22"
List1.AddItem "20:10:45" 'osv
End Sub
Private Sub Command1_Click()
List1.AddItem (Text1.Text) ' Testar när det står 20:16:32 i TextBox1
Call ListSort
End Sub
Private Sub ListSort()
Dim i As Long
For i = List1.ListCount - 1 To 0 Step -1 'räknar baklänges
List2.AddItem List1.List(i)
Next 'i
End Sub
</code>Sv:Sortera en listbox
Edit: Ja, ja - nu såg jag att den skulle vara fallande sorterad...Sv: Sortera en listbox
Kul att se om det finns listigare lösningar.
Var inne på Array med inverterade Single-tal
En ListBox Visible = False Sorted = True är nog det optimala.
Sven optimalbögSv:Sortera en listbox
En grej jag tänkte på , var att Invertera alla Single numeric Tid och sorter därefter.
Släppte det kom på att en billig ListBox Visible = False Sorted = True
ÄRRRRRRRRRRRRRR uppfinn inte hjulet igen ?Sv: Sortera en listbox
Do
Moved = False
For i = 0 To List1.ListCount - 2
If List1.List(i) < List1.List(i + 1) Then
Moved = True
Temp = List1.List(i)
List1.List(i) = List1.List(i + 1)
List1.List(i + 1) = Temp
End If
Next i
Loop Until Moved = FalseSv:Sortera en listbox
Förstår inte varför du har ListCount - 2 ,då missar du den sista.
<code>
Option Explicit
'List1 Sorted = False
Private Sub Command2_Click()
Dim i As Long, temp As String, Moved As Boolean
Do
Moved = False
For i = 0 To List1.ListCount - 1
If List1.List(i) < List1.List(i + 1) Then
Moved = True
temp = List1.List(i)
List1.List(i) = List1.List(i + 1)
List1.List(i + 1) = temp
End If
Next 'i
Loop Until Moved = False
End Sub
</code>Sv: Sortera en listbox
<code>
List1.Sorted=True
List1.Visible=False
sub UpdateList2()
list2.clear
for i = list1.listcount-1 to 0 step -1
list2.add(list1.item(i))
next i
end sub
</code>
Kör UpdateList2 varje gång innehållet i list1 ändras.
Detta givet att man faktiskt får ut elementen i den sorterade ordningen.Sv:Sortera en listbox
Observerade inte att det var den gamla Bubbelsort han använde.
Som sagt 2 Listboxar en Sorterad är den optimala lösningen.
Och givetvis tillägg List2.Clear inför varje operation.