Seite 1 von 1

Listbox- Einträge sortieren

Verfasst: Sa 26. Dez 2009, 17:44
von alf17
Hallo,
zu gern wollte ich Einträge in der Listbox sortieren. Einfach nur anwählen und dann auf den "Hoch" bzw. "Runter"-Knopf clicken. Nach etlichen Kaffee's sortiert sich das Teil endlich! Den Code möchte ich hier mal posten, denn ihr habt sicherlich eine elegantere Lösung parat!

Code: Alles auswählen

PUBLIC SUB ButtonHoch_Click() '.................Sortierung nach oben.................

DIM nHoch AS Integer            'Zählvariable für eine Zeilennummer hochschieben
DIM ZeilenText AS String        'Text-Dateiname in der ausgewählten Zeile
DIM ZeileVorher AS String       'Text-Dateiname in der Zeile oberhalb der ausgewählten Zeile

    IF AuswahlListbox > 0 THEN   
    
        AuswahlListbox = ListBoxPool.Index      '--> aktueller Index der zu verschiebenden Zeile 
        ZeilenText = ListBoxPool.Text           '--> dazu passender Listeneintrag
        
        nHoch = AuswahlListbox - 1              'Index um 1 verkleinern
        ListBoxPool.Index = nHoch               'kleineren Zeilenindex setzen
        ZeileVorher = ListBoxPool.Text          'String mit Inhalt der kleineren Zeile beschreiben
              
        ListBoxPool.Add(ZeileVorher, nHoch)             'n-1 Zeile neu schreiben
        
        ListBoxPool.Remove(AuswahlListbox)              'n-te Zeile entfernen
        ListBoxPool.Add(ZeilenText, AuswahlListbox)     'n-te Zeile neu schreiben
        ListBoxPool.Remove(AuswahlListbox + 2)          'n+2te Zeile löschen
       
    ELSE 
        Message("Höher geht's nicht!", "OK")
    ENDIF
END

PUBLIC SUB ButtonRunter_Click() '..................Sortierung nach unten..................

DIM nTief AS Integer            'Zählvariable für eine Zeilennummer runterschieben
DIM ZeilenText AS String        'Text-Dateiname in der ausgewählten Zeile
DIM ZeileDrunter AS String      'Text-Dateiname in der Zeile unterhalb der ausgewählten Zeile

    IF AuswahlListbox < ListBoxPool.Count - 1 THEN   
    
        AuswahlListbox = ListBoxPool.Index      '--> aktueller Index der zu verschiebenden Zeile 
        ZeilenText = ListBoxPool.Text           '--> dazu passender Listeneintrag
        
        nTief = AuswahlListbox + 1              'Index um 1 erhöhen
        ListBoxPool.Index = nTief               'größeren Zeilenindex setzen
        ZeileDrunter = ListBoxPool.Text          'String mit Inhalt der kleineren Zeile beschreiben
       
        ListBoxPool.Remove(nTief)                'n-te Zeile entfernen (eine nach der Auswahl)
        ListBoxPool.Add(ZeilenText, nTief)                'n+1 Zeile neu schreiben
        
         ListBoxPool.Add(ZeileDrunter, AuswahlListbox)     'n-te Zeile neu schreiben      
        ListBoxPool.Remove(AuswahlListbox - 1)              'überzählige Zeile Löschen      
           
    ELSE 
        Message("Tiefer geht's nicht!", "OK")
    ENDIF
END
Nicht schön, funktioniert aber in diesem Fall.
Viele Grüße Alf