Gå til innhold

Sortere listbox etter dato (dd.mm.åååå)


Anbefalte innlegg

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
Videoannonse
Annonse

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...