Listbox Sortieren nach Zahlen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von codejunker.

    Listbox Sortieren nach Zahlen

    Guten Abend alle zusammen.

    So gleich mal zu meinem Problem, für das ich nach ewig langem suchen, ausprobieren und natürlich verzweifeln, noch immer keine Lösung habe. :)

    Und zwar hab ich eine Listbox zu der man einen Benutzer mit Name und Nachname einfügen kann. Ganz einfach über eine Textbox. Dies stellt keine Probleme dar.
    Nun wird aber dem Benutzer mit der Zeit immer einen grösseren Wert zugewiesen. Das geschieht in dem das Item gelöscht und gleichzeitig mit dem neuen Wert hinzugefügt wird. So verschwindet das alte immer.

    Das sieht dann in etwa so aus:

    235 Martin Meier
    492 Simon Meier

    u.s.w

    Nun, wie ihr euch schon vorstellen könnt, sollten die Zahlen sortiert sein. Aber wie???
    Einfach mit Sorted = True geht das ja nicht, weill die 1000 dann vor der 235 kommt...


    Wäre extreeeeeem froh über eine Lösung!

    Vielen Dank!!!!
    Tja,

    willkommen in der objectorientierten Programmierung.

    Es gibt 2 Dinge, wie Du das lösen kannst (jedenfalls fallen mir 2 ein).

    1. Du machst das Ganze mit einem Datagridview und nem DataSet. Da hast Du Sortiermethoden schon drin. Wenn Dich das interessiert, dann schau mal hier im Forum nach "Datenbankprogrammierung ohne Datenbank".

    2. Du erstellst Dir eine Klasse und kapselst die gewünschten Daten darin. Dann kommst Du auch gleich zum nächsten Punkt, indem Du Daten von der GUI trennst. Dies bedeutet, dass Du die Instanzen dieser Klasse in einer Liste verwaltest und die ListBox nur zum Anzeigen nutzt. Diese Liste kannst Du dann entsprechend sortieren.

    Welchen Weg hätten Sie denn gerne?
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Willkommen im Forum. :thumbup:
    Oder Du gibst die Buchstabenfolge listbox sortieren oben rechts bei Suchbegriff eien und erhältst dies:
    Suchergebnisse
    Suchergebnisse 1-30 von insgesamt 83 für »listbox sortieren«.
    Diese Suchbegriffe wurden hervorgehoben: listbox sortieren
    Sieh Dir die Resultate an und wenn Du nix passendes findest, melde Dich wieder.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Tja,

    willkommen in der objectorientierten Programmierung.

    Es gibt 2 Dinge, wie Du das lösen kannst (jedenfalls fallen mir 2 ein).

    1. Du machst das Ganze mit einem Datagridview und nem DataSet. Da hast Du Sortiermethoden schon drin. Wenn Dich das interessiert, dann schau mal hier im Forum nach "Datenbankprogrammierung ohne Datenbank".

    2. Du erstellst Dir eine Klasse und kapselst die gewünschten Daten darin. Dann kommst Du auch gleich zum nächsten Punkt, indem Du Daten von der GUI trennst. Dies bedeutet, dass Du die Instanzen dieser Klasse in einer Liste verwaltest und die ListBox nur zum Anzeigen nutzt. Diese Liste kannst Du dann entsprechend sortieren.

    Welchen Weg hätten Sie denn gerne?

    Den 2. bitte :)
    Hab auch schon mal mit der Suchfunktion ein Code gefunden der mit einem Array arbeitet. Aber kapier die Codes nicht so ganz. Funktioniert das auch wenn ich noch Text hinten dran hab?

    vb-fun.de/cgi-bin/loadframe.pl?ID=dotnet/tipps/tip0115.shtml

    codejunker schrieb:

    Aber kapier die Codes nicht so ganz.
    Poste konkreten Code, stell konkrete Fragen, unterlass solch riesige Zitate.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Es gibt ghier 2 sinnvolle Grundsätze die genannt wurden:
    - speichere Objekte nicht in 1 String, wenn sie mehrere Properties haben (Count,Vorname,Nachname)
    - trenne Präsentation von den Daten: speichere Deine Daten also in einer List oder Datatable und benutze die Listbox nur zu Darstellung
    Insofern hat Dir SpaceyX 2 sinnvolle Optionen genannt, wobei Datasets für den Anfang nicht schlecht sind. Wenn man in der geistigen Entwicklung nicht dort hängen bleibt ...*hust*

    codejunker schrieb:

    Hab auch schon mal mit der Suchfunktion ein Code gefunden der mit einem Array arbeitet. Aber kapier die Codes nicht so ganz. Funktioniert das auch wenn ich noch Text hinten dran hab?
    Der gepostete Code ist ziemlich übel, genauso wie die meisten Beispiele die man über die Suchfunktion findet. Und nein, die funktionieren nur mit reinen Zahleneinträgen.
    Besser:
    "Listbox sortieren"

    VB.NET-Quellcode

    1. Imports System.Text.RegularExpressions
    2. ...
    3. Sub SortListbox(ByVal box As ListBox)
    4. ' box prüfen: sortieren sinnvoll ?
    5. If box Is Nothing OrElse box.Items.Count < 2 Then Return
    6. ' 2 arrays anlegen
    7. Dim count As Integer = box.Items.Count
    8. Dim items(count - 1) As Object ' enthält die ganzen strings
    9. Dim numbers(count - 1) As Integer ' enthält nur die extrahierten Zahlen
    10. ' items kopieren
    11. box.Items.CopyTo(items, 0)
    12. ' Zahlenarray
    13. For i = 0 To count - 1
    14. 'Dim m As Match = Regex.Match(CStr(items(i)), "(\d+)") ' extrahiert die erste beliebige Zahl
    15. Dim m As Match = Regex.Match(CStr(items(i)), "^(\d+)") ' extrahiert nur Zahlen die am Anfang stehen
    16. If m.Success Then numbers(i) = CInt(m.Groups(1).Value) Else numbers(i) = 0
    17. Next
    18. ' beide arrays sortieren: numbers führt
    19. Array.Sort(numbers, items)
    20. ' Liste neu befüllen
    21. box.Items.Clear()
    22. box.Items.AddRange(items)
    23. End Sub