Listbox aus TXT füllen

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von sonne75.

    Listbox aus TXT füllen

    Hallo und guten Tag
    Ich versuche seit 2 Tagen eine Listbox mit einer TXT zu füllen
    Bei diesem Code passiert folgendes:
    Wenn ich den ersten Eintrag auswähle, erscheint der Text in der TextBox und als Buttontext.
    Wähle ich den zweiten Eintrag aus,erscheint der Text nur in der TextBox

    VB.NET-Quellcode

    1. Public Class Konfig
    2. Private Sub Konfig_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. ListBoxRead(LSTSpieler1, "d:\myList.txt")
    4. ListBoxRead(LSTSpieler2, "d:\myList.txt")
    5. End Sub
    6. Public Function ListBoxRead(ByVal ListBox As ListBox, ByVal Filename As String) As Boolean
    7. Dim bResult As Boolean = False
    8. If IO.File.Exists(Filename) Then
    9. Try
    10. With ListBox.Items
    11. .Clear()
    12. .AddRange(My.Computer.FileSystem.ReadAllText( _
    13. Filename, System.Text.Encoding.Default).Split(vbCrLf))
    14. End With
    15. bResult = True
    16. Catch ex As Exception
    17. End Try
    18. End If
    19. Return (bResult)
    20. End Function
    21. Private Sub LSTSpieler2_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LSTSpieler2.SelectedIndexChanged
    22. TBox_Spieler2.Text = LSTSpieler2.SelectedItem
    23. But_Spieler_2.Text = LSTSpieler2.SelectedItem
    24. End Sub
    25. Private Sub LSTSpieler1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LSTSpieler1.SelectedIndexChanged
    26. TBox_Spieler1.Text = LSTSpieler1.SelectedItem
    27. Button1.Text = TBox_Spieler1.Text
    28. End Sub
    29. End Class




    was mache ich da verkehrt?

    trebron57
    Wie ich es verstehe, geht es ihm um die Beschriftung der Buttons, und die Beschriftung vom 2. Button ist einfach falsch programmiert (kein Item der ListBox zugewiesen).

    Abgesehen davon habe ich es wirklich übersehen, nach .SelectedItem muss noch ".ToString" dran.

    iEi schrieb:

    Also ich mache es immer so um eine ListBox mit Daten aus einer TXT zu befüllen:

    VB.NET-Quellcode

    1. Dim sr As New IO.StreamReader("HIER DEIN PFAD")
    2. While Not sr.EndOfStream
    3. ListBox1.Items.Add(sr.ReadLine)
    4. End While
    5. sr.Close()



    1. Guck dir die Datasource Eigenschaft von der Listbox an.


    VB.NET-Quellcode

    1. ListBox.DataSource = IO.File.ReadAllLines(Filename)


    Jede Zeile der Textdatei ist dann ein Listboxitem.
    Wenn ich in Listbox den ersten Eintrag anwähle erhält das Textfeld und der Button den gewählten Text.
    Wenn ich den zweiten Eintrag anwähle erhält nur das Textfeld den gewählten Text
    Sprich:wenn ich den ersten Eintrag anwähle ist alles gut, bei allen anderen Einträgen erscheint der Text nur in der TextBox nicht im Button

    VB.NET-Quellcode

    1. Private Sub LSTSpieler1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LSTSpieler1.SelectedIndexChanged
    2. TBox_Spieler1.Text = LSTSpieler1.SelectedItem
    3. But_Spieler_1.Text = TBox_Spieler1.Text
    4. End Sub
    5. Private Sub LSTSpieler2_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LSTSpieler2.SelectedIndexChanged
    6. TBox_Spieler2.Text = LSTSpieler2.SelectedItem
    7. But_Spieler_2.Text = TBox_Spieler2.Text
    8. End Sub

    Sag mal, hast du meine Beiträge gelesen? Ich habe dir doch genau diese Frage beantwortet, warum es bei dir falsch ist.

    Wie ich es verstehe, geht es ihm um die Beschriftung der Buttons, und die Beschriftung vom 2. Button ist einfach falsch programmiert (kein Item der ListBox zugewiesen).
    @Sonne75
    Ich starte das Programm. Dann erscheint folgender Screen



    Jetzt wähle ich den ersten Eintrag aus. Eintrag erscheint in TextBox und Button (also ist alles richtig zugewiesen)



    Jetzt wähle ich den zweiten Eintrag(kann auch 3,4,oder 5 sein) jetzt erscheint der Eintrag nur noch in der TextBox nicht mehr im Button



    Da es beim ersten Eintrag funktioniert, muss doch alles richtig zugewiesen sein, oder?

    trebron57
    Dein zweiter Code ist ganz anders als Erster und der letzte wieder anders. Von daher kann man da sowieso nicht sagen, was bei dir nicht funktioniert, wenn du es nicht mal merkst, dass der Code nicht gleich ist.

    Welcher Code ist aktuell (den du schon ausprobiert hast!!)?
    Hallo
    Der Fehler aus den drei Bildern passiert mit folgendem Code

    VB.NET-Quellcode

    1. Public Class Konfig
    2. Private Sub Konfig_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    3. ListBoxRead(LSTSpieler1, "d:\myList.txt")
    4. End Sub
    5. Public Function ListBoxRead(ByVal ListBox As ListBox, ByVal Filename As String) As Boolean
    6. Dim bResult As Boolean = False
    7. If IO.File.Exists(Filename) Then
    8. Try
    9. With ListBox.Items
    10. .Clear()
    11. .AddRange(My.Computer.FileSystem.ReadAllText( _
    12. Filename, System.Text.Encoding.Default).Split(vbCrLf))
    13. End With
    14. bResult = True
    15. Catch ex As Exception
    16. End Try
    17. End If
    18. Return (bResult)
    19. End Function
    20. Private Sub LSTSpieler1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LSTSpieler1.SelectedIndexChanged
    21. TBox_Spieler1.Text = LSTSpieler1.SelectedItem.ToString
    22. But_Spieler_1.Text = TBox_Spieler1.Text
    23. End Sub
    24. End Class


    Trebron57
    Mach mal OPTION STRICT ON und verbessere mal die Fehler, dann wird Dir auch schlagartig klar, warum das so ist, wie es ist.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    Ich sehe auf Anhieb nichts (beim letzten Code). Mach es mit einer Variable:

    VB.NET-Quellcode

    1. Private Sub LSTSpieler1_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LSTSpieler1.SelectedIndexChanged
    2. Dim Test = = LSTSpieler1.SelectedItem.ToString
    3. TBox_Spieler1.Text = Test
    4. But_Spieler_1.Text = Test
    5. End Sub


    und schau mit Haltepunkt auf der ersten Zeile, welchen Wert die Variable wann hat:

    [VB 2010] Debuggen, Fehler finden und beseitigen
    Dann wird mir folgender Fehler(nach dem ich die anderen korrigiert habe), angezeigt

    "Option Strict On" lässt keine Operanden des Typs "Object" für den &-Operator zu.

    oStream.Write(.Item(i) & IIf(i < .Count - 1, vbCrLf, ""))
    Das sagt mir gar nichts.
    Wie kann ich das beheben?

    trebron57
    Seltsam, von diesem Code hast Du uns aber bisher nichts erzählt. Aber ich sag Dir mal was dazu, es ist falsch, egal in welchem Zusammenhang.

    Dein Problem ist, dass Du hier den Fehler machst.

    VB.NET-Quellcode

    1. .AddRange(My.Computer.FileSystem.ReadAllText( _
    2. Filename, System.Text.Encoding.Default).Split(vbCrLf))


    Erstens. My-Computer kannst Du aus Deinem Gehirn löschen. Nutze den System.IO-NameSpace, dort findest Du auch eine Funktion: ReadAllLines(). Aber das ist nicht der grundlegende Fehler.

    Schau Dir mal die Funktion Split() genau an. Dort gibt es keine Überladung, die einen String annimmt. OPTION STRICT OFF konvertiert Dir Dein vbCrLf, welches Du auch vermeiden solltest, zu EINEM Char. Ergo hast Du bei Deinen Buttons am Anfang ein LineFeed stehen, was Dir einfach den Text des Buttons um eine Zeile nach unten verschiebt. Zieh mal den Button höher, dann siehst Du, was gemeint ist. Ausser beim ersten Eintrag in Deiner ListBox, da ja hier kein Lf am Anfang steht.

    Wenn, dann

    VB.NET-Quellcode

    1. .AddRange(IO.File.ReadAllText( _
    2. Filename, System.Text.Encoding.Default).Split({Environment.NewLine}, StringSplitOptions.RemoveEmptyEntries))


    Die Split-Funktion übernimmt aber ein StringArray in einer Überladung, welches durch {} erzeugt wird.

    Nimm lieber IO.File.ReadAllLines(), dann tritt dieses Problem gar nicht erst auf. Aber, Dein ganzes Gefrickel mit Strings wird sich ohnehin rächen.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o