NikkaYoichi Skrevet 7. november 2005 Del Skrevet 7. november 2005 Er det mulig å sortere innholdet i en listbox (alle itemene er en dato med formatet dd.mm.åååå, feks 15.10.2005 som er 15. oktober 2005)? Takk 5116933[/snapback] Jepp, det skulle være fult mulig. I VB så kommer alternativene opp når du skriver, så det er vel bare å velge det som høres fornuftig ut, sort kanskje? Lenke til kommentar
Degeim Skrevet 7. november 2005 Del Skrevet 7. november 2005 Er det mulig å sortere innholdet i en listbox (alle itemene er en dato med formatet dd.mm.åååå, feks 15.10.2005 som er 15. oktober 2005)? Takk Lenke til kommentar
Degeim Skrevet 7. november 2005 Del Skrevet 7. november 2005 (endret) Nei, beklager, det glemte jeg å nevne. Jeg har prøvd den, og den fungerer fint for dagene, men den sorterer månedene i feil rekkefølge. Endret 7. november 2005 av Degeim Lenke til kommentar
aadnk Skrevet 7. november 2005 Del Skrevet 7. november 2005 Du kan jo simpelthen lage din egen sorteringsprosedyre, eksempelvis ved å modifisere en QuickSort-algoritme slik som dette: Public Sub SortListBox(ListBox As ListBox, bDirection As Boolean, cDataType As VbVarType, Optional Min, Optional Max) Dim vMedValue, lngHigh As Long, lngLow As Long, Tell As Long ' Initialiser variabler, om de mangler If IsMissing(Min) Or IsMissing(Max) Then ' Sett variabler i henhold til den angitte listeboks Min = 0 Max = ListBox.ListCount - 1 End If ' Dersom listeboksen inneholder èn eller færre elementer å sortere, er det så absolutt ikke ' verd å fortsette If Min >= Max Then Exit Sub End If ' Initialiser tilfeldighetsgenerator Randomize ' Velg en tilfeldig separeringsverdi Tell = Int((Max - Min + 1) * Rnd + Min) ' La medianverdien tilsvare separeringsverdien i førstingen vMedValue = ListBox.list(Tell) ' Bytt mellom elementer ListBox.list(Tell) = ListBox.list(Min) ' Bruk midlertidige variabler, slik at vi ikke mister verdiene lngLow = Min lngHigh = Max Do ' Se nedover fra lngHigh etter en verdi som er større enn vMedValue. Do While CompareValues(ListBox.list(lngHigh), vMedValue, bDirection, cDataType) lngHigh = lngHigh - 1 If lngHigh <= lngLow Then Exit Do Loop If lngHigh <= lngLow Then ListBox.list(lngLow) = vMedValue Exit Do End If ' Bytt mellom det minste og det største elementet ListBox.list(lngLow) = ListBox.list(lngHigh) ' Se oppover fra lngLow etter en verdi som er mindre eller lik vMedValue. lngLow = lngLow + 1 Do While CompareValues(ListBox.list(lngLow), vMedValue, Not bDirection, cDataType) lngLow = lngLow + 1 If lngLow >= lngHigh Then Exit Do Loop If lngLow >= lngHigh Then lngLow = lngHigh ListBox.list(lngHigh) = vMedValue Exit Do End If ' Bytt mellom det minste og det største elementet ListBox.list(lngHigh) = ListBox.list(lngLow) Loop ' Sorter de to underlistene SortListBox ListBox, bDirection, cDataType, Min, lngLow - 1 SortListBox ListBox, bDirection, cDataType, lngLow + 1, Max End Sub Public Function CompareValues(ByVal Value1, ByVal Value2, Direction As Boolean, cDataType As VbVarType) As Boolean ' Convert the two comparing variables Value1 = ConvertVar(Value1, cDataType) Value2 = ConvertVar(Value2, cDataType) ' Returner en sammenlikning mellom de to verdiene (kan bli modifisert til å passe for andre datatyper) CompareValues = IIf(Direction, Value1 >= Value2, Value1 < Value2) End Function Public Function ConvertVar(Value, cDataType As VbVarType) As Variant ' Konverter variabel etter angitt variabeltype Select Case cDataType Case vbString: ConvertVar = CStr(Value) Case vbLong: ConvertVar = CLng(Value) Case vbInteger: ConvertVar = CInt(Value) Case vbDouble: ConvertVar = CDbl(Value) Case vbSingle: ConvertVar = CSng(Value) Case vbDate: ConvertVar = CDate(Value) Case vbCurrency: ConvertVar = CCur(Value) Case Else: ConvertVar = Value End Select End Function På den måten kan du med enkelhet sortere en listeboks basert på hvilket sammenlikningsgrunnlag du måtte ønske (Long, String, Date .ect). Ved å endre på bDirection, kan du òg avbesteme hvorvidt de høyeste elementene vil havne øverst eller nederst. Du kan kalle funksjonen således: SortListBox lstTest, True, vbDate Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå