ListBox bestimmten Eintrag auslesen

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von Arbian.

    ListBox bestimmten Eintrag auslesen

    Hallo zusammen,

    ich wollte ein simples Programm erstellen das eine Datei ausliest und dann in eine Textbox, die Zahl was hinter dem
    Wort steht, übernimmt. Ich habe das ganze versucht erst in eine ListBox hineinzufügen und dann von dort aus die Zahl
    auszulesen, allerdings bin ich Ratlos.

    Mein Code für den Button1

    VB.NET-Quellcode

    1. OpenFileDialog1.ShowDialog() OpenFileDialog1.Title = "Öffnen" listbox1.Items.AddRange(System.IO.File.ReadAllLines(OpenFileDialog1.FileName))



    Inhalt der Datei
    Test1: 20
    Test2: 25
    Test3: 30
    Test4: 35
    Test5: 40

    Wie ich den kompletten Text auslesen kann weis ich, habe ich ganz simple gemacht:

    VB.NET-Quellcode

    1. If listbox1.Items.Contains("Text1: 20") Then label1.Text = "Text1: 20" End If




    Soweit so gut, es wird alles in die ListBox hinzugefügt nun weis ich allerdings nicht wie ich nun nur
    die Zahl auslesen kann.

    Ich hoffe jemand kann mir helfen.

    lg
    Splitte beim ":", hole dir den zweiten/rechten Teil mit dem Index 1 und trimme den, um die Leerzeichen zu entfernen, wobei Du Dir was gescheites überlegen sollst für so ein Format (JSON, XML etc.)
    Zudem solltest Du den OpenFileDialog disposen bzw disposen lassen, indem Du ihn in einen Using-Block steckst.
    Und du solltest das DialogResult abfragen, um richtig zu reagieren.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Splitte deine Einträge beim Einlesen




    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub openbutton_Click(sender As Object, e As EventArgs) Handles openbutton.Click
    3. With OpenFileDialog1
    4. .Filter = "Textdokument(*.txt)|*.txt"
    5. .FilterIndex = 1
    6. .FileName = ""
    7. .InitialDirectory = "C:"
    8. .Title = ""
    9. .ShowDialog()
    10. End With
    11. End Sub
    12. Private Sub OpenFileDialog1_FileOk(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles OpenFileDialog1.FileOk
    13. With OpenFileDialog1 'split für Leuchtennamen
    14. Dim Lines() As String = System.IO.File.ReadAllLines(.FileName, System.Text.Encoding.UTF7)
    15. For Each Line As String In Lines
    16. Dim Splitted() As String = Line.Split(CChar(":"))
    17. If Splitted.Length <> 5 Then Continue For
    18. ListBox1.Items.Add(Splitted(0))
    19. ListBox2.Items.Add(Splitted(1))
    20. Next
    21. End With
    22. End Sub
    23. End Class
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    Test1: 20
    Test2: 25
    Test3: 30
    Test4: 35
    Test5: 40

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim Zeilen() As String = IO.File.ReadAllLines(IO.Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "Testdatei.txt"), System.Text.Encoding.Default)
    3. Dim Ausgabe As String = ""
    4. For i As Integer = 0 To Zeilen.Count - 1
    5. Ausgabe &= Zeilen(i).Split(CChar(":"))(1) & vbNewLine
    6. Next
    7. TextBox1.Text = Ausgabe
    8. End Sub

    LG...
    Danke erstmal für die ganzen Antworten.
    Hab es nun so halbwegs begriffen wie ich es direkt aus der .txt Datei splitten kann,
    gibt es allerdings eine Möglichkeit die aus der ListBox zu splitten?

    Also z.B. wenn in der .txt Datei steht:

    "Apfel
    Banane
    Kirsche
    Melone:20"

    Diese werden dann alle in eine ListBox geaddet, von dort aus möchte ich alle
    normalen Wörte ganz normal auslesen bzw. wenn Apfel drinnen steht dann ist das Label Apfel visible usw,
    wenn dann allerdings Melone:20 steht möchte ich das Label Melone Visible machen und die 20 in eine Textbox
    daneben anzeigen lassen, gibt es da irgendeine Möglichkeit?

    Dachte es geht eventuell mit dem Ansatz:

    VB.NET-Quellcode

    1. If listbox1.items.contains("Melone:") then ... 'hier weis ich nicht mehr weiter wie ich nun die Zahl hinter dem ":" auslese end if


    lg
    Ja gibt's!

    VB.NET-Quellcode

    1. Dim s As String = CStr(ListBox1.Items.Item(0)) ' 0 ist der Index kann auch 1,2,3,4,5 usw. oder über schleife
    2. TextBox1.Text = s.Split(CChar(";"))(1) ' 1 ist der 2 Teil des Texts kannst aber such 0 oder 2 nehmen



    Wenn dir die Beiträge helfen dann bitte als Hilfreich markieren! THX :thumbsup:
    @StefanS0: Verwende lieber .tostring() ! :)

    VB.NET-Quellcode

    1. zu dem Teil hier hier:
    2. s.Split(CChar(";"))(1)

    mach statt CChar einfach ein C hinter den Gänsefüßchen so etwas:

    VB.NET-Quellcode

    1. s.Split((";"c))(1)

    das c steht für Char und ist besser so! ;)
    Wenn ich den Code so schreibe:

    VB.NET-Quellcode

    1. If listbox1.items.contains("Melone:") then Dim s As String = CStr(listbox1.Items.Item(5)) textbox1.Text = s.Split(CChar(":"))(1) end if


    Habe 5 genommen weil Melone das 5te Item in meiner Listbox ist (hoffe es liegt nicht daran)
    bekomme ich keine Fehlermeldung allerdings wird die Zahl nicht ausgegeben/angezeigt.

    Wenn ich allerdings den Code so schreibe:

    VB.NET-Quellcode

    1. Dim s As String = CStr(listbox1.Items.Item(5)) textbox1.Text = s.Split(CChar(":"))(1)



    bekomme ich eine Fehlermeldung :-/
    @StefanS0: Ja funktionieren tut schon, aber es stammt glaub ich (mir war danach) aus dem Microsoft.VisualBasic Verweis und ist deswegen VB06 Kram, also sollte man nicht mehr verwenden :)

    Ist ja genauso wie CInt --> Integer.Parse / .TryParse und solche Sachen.
    Weis nun wo der Fehler war.
    Wenn ich es ohne dem

    VB.NET-Quellcode

    1. If listbox1.items.contains("Melone:") then .. end if



    Hat er zu früh die Abfrage gemacht, dadurch ich die Abfrage gleich mache wenn ich
    beim OpenFileDialog auf Ok bzw. Öffnen klicke, deswegen kam immer die Fehlermeldung das der
    Index, in meinem Fall (4), nicht existiert.

    Habe ich allerdings den Code mit dem

    VB.NET-Quellcode

    1. If listbox1.items.contains("Melone:") then .. end if



    konnte er die Zahl dahinter nicht ausgeben weil das Item in der ListBox nicht nur
    "Melone:" heißt sondern "Melone:20", somit gab es dieses Item nicht und die Ausgabe wurde ignoriert.


    Nun habe ich einen Button Öffnen und einen Button Auslesen erstellt und es funktioniert alles einwandfrei,
    es ist zwar ein bisschen umständlich da ich erst auf Öffnen klicken muss und dann auf auslesen, aber es funktioniert.

    Danke für die zahlreichen und hilfreichen Antworten!

    lg