Listbox auslesen und in Array schreiben

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Listbox auslesen und in Array schreiben

    Hallo Community,

    bin gerade am wieder erlernen von VB :) Hatte mich schon vor einiger Zeit mal damit beschäftigt, konnte dies jedoch nie so richtig intensivieren.

    Ich möchte gerne eine gefüllte Listbox in ein Array einlesen. Die Listbox kann der Benutzer mit so vielen Einträgen füllen wie er mag. Aus diesem Grund besitzt das Array auch keine feste Größe. Ich habe nun bereits den Code geschrieben, jedoch gibt es hier leider noch ein Problem.

    VB.NET-Quellcode

    1. Option StrictOnPublic Class Form1
    2. Dim arraygröße As Integer
    3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_speichern.Click
    4. ListBox1.Items.Add(txt_eingabe.Text)txt_eingabe.Text = "" End Sub
    5. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_auslesen.Click
    6. arraygröße = ListBox1.Items.Count - 1lbl_ausgabe.Text = Convert.ToString(arraygröße)
    7. Dim inhalt(arraygröße) As String
    8. For i = 0 To arraygrößeinhalt(i) = Convert.ToString(ListBox1.Items.Item(i))i = i + 1
    9. Next
    10. End Sub
    11. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Loadlbl_ausgabe.Text = ""End SubEnd Class


    Das Problem liegt bei dem einlesen der Listboxeinträge.

    Wir nehmen an, das wir in die Listbox drei Einträge gespeichert haben. 1, 2 und 3. Diese Zahlen stehen nun als Item in der Listbox.
    Somit muss das Array die Größe zwei haben? Da das Array ja mit Null beginnt und somit nun genau drei Speicherfelder hat.
    Leider durchläuft das Programm die For schleife nur zweimal, somit fehlt der letzte Eintrag. Ich kann mir das nicht erklären. Ist irgendwo ein Fehler drin?

    das lbl_ausgabe dient mir nur zur Hilfe und hat überhaupt keine Auswirkungen auf das Programm.

    Könnt Ihr mir evtl. helfen?
    Hey,
    für sowas brauchst Du aber keine Arraygrenzen zu setzen.

    Hier:

    VB.NET-Quellcode

    1. Dim B As String() = (From n In ListBox1.Items.OfType(Of String)() Select n).ToArray
    2. For Each p As String In B
    3. MessageBox.Show(p)
    4. Next


    Edit(mit Grenze) geht das so :

    VB.NET-Quellcode

    1. Dim c As Integer = ListBox1.Items.Count - 1
    2. Dim B(c) As String
    3. For i As Integer = 0 To c
    4. B(i) = CStr(ListBox1.Items(i))
    5. Next
    6. For Each p As String In B
    7. MessageBox.Show(p)
    8. Next
    Ich gehe mal davon aus, dass die Items Property von der ListBox IEnumberable ist und somit kannst du einfach Items.ToArray() verwenden?


    Opensource Audio-Bibliothek auf github: KLICK, im Showroom oder auf NuGet.

    VB.NET-Quellcode

    1. Dim lst As List(Of String)
    2. For Each lstitem As Item In ListBoxArr
    3. lst.Add(lstitem.ToString)
    4. Next


    Wäre mit ner einfachen List.
    Ansonsten:

    VB.NET-Quellcode

    1. Public Sub DeineSub
    2. Dim arrcount As Integer = ListBoxArr.Items.Count
    3. arrcount = arrcount -1
    4. Dim content(arrcount) As String
    5. For Each lstboxitem As String In ListBoxArr.Items
    6. content = AddLineToStringArray(content, lstboxitem.ToString)
    7. Next
    8. End Sub
    9. Private Function AddLineToStringArray(Array As String(), Line As String) As String()
    10. Dim IncreasedArray As String() = New String(Array.Length) {}
    11. For Pos As Integer = 0 To Array.Length - 1
    12. IncreasedArray(Pos) = Array(Pos)
    13. Next
    14. IncreasedArray(Array.Length) = Line
    15. Return IncreasedArray
    16. End Function


    Grüße
    "Life isn't about winning the race. Life is about finishing the race and how many people we can help finish the race." ~Marc Mero

    Nun bin ich also auch soweit: Keine VB-Fragen per PM! Es gibt hier ein Forum, verdammt!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Nikx“ ()

    ist eh crap, der ganze ansatz.
    Man sollte keine Dinge in eine Listbox tun, sondern man tue sie gleich in eine BindingList(Of T).
    An diese Bindinglist kann man die Listbox binden.

    Auf diese Weise muß man ühaupt nicht "Listbox auslesen und in Array schreiben", denn die gewünschte Bindinglist (array ist ja eh crap) ist ja a priory da.