Listbox- Einträge sortieren

Eigene oder Gemeinschaftsprojekte, Klassen, Module, Codeschnipsel, HowTos, ...
Antworten
Benutzeravatar
alf17
Foriker
Beiträge: 37
Registriert: Do 7. Jun 2007, 16:46
Kontaktdaten:

Listbox- Einträge sortieren

Beitrag von alf17 » Sa 26. Dez 2009, 17:44

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
Nichts verhilft so sicher zu einer eigenen Meinung wie der konsequente Verzicht auf Sachkenntnis!

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste