listbox items speichern und laden fehlerhaft

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Unwesen.

    listbox items speichern und laden fehlerhaft

    Moin,
    habe hier einen code, der leider nicht funktioniert. ich bekomme keine fehlermeldung, bis auf eine warnung.(Warnung 1 Die save-Variable wird verwendet, bevor ihr ein Wert zugewiesen wird. Zur Laufzeit kann eine Nullverweisausnahme auftreten.)
    es soll die listboxitems gespeichert werden und dann wieder ausgelesen werden. lieber wäre es mir mit einer txt datei gewesen aber anders bekomme ich es iwie nicht hin..

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click If TextBox1.Text = ("") Then MsgBox("Bitte einen Betrag eingeben.") Exit Sub Else If TextBox2.Text = ("") Then MsgBox("Bitte einen Grund angeben.") Exit Sub End If
    2. End If If Not IsNumeric(TextBox1.Text) Then MsgBox("Betrag: Nur Zahlen erwünscht.") TextBox1.Text = ("") TextBox2.Text = ("") Else ListBox1.Items.Add(TextBox2.Text) ListBox2.Items.Add(TextBox1.Text) ListBox3.Items.Add(Today) TextBox2.Text = ("") TextBox1.Text = ("") Dim save As String For i As Integer = 0 To ListBox1.Items.Count - 1 If save = "" Then save = ListBox1.Items(i) Else save = save & vbNewLine & ListBox1.Items(i) End If Next My.Settings.listbox1 = save End If
    3. End Sub


    Hier wird erstmal nur die erste listbox gespeichert, die andere kann ich ja noch hinzufügen, WENN es denn funktionieren würde. :/
    Der code zum aufrufen den ich verwende:

    VB.NET-Quellcode

    1. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.LoadDim laden As New RichTextBoxladen.Text = My.Settings.listbox1For i As Integer = 0 To laden.Lines.Count - 1ListBox1.Items.Add(laden.Lines(i))Next
    2. End Sub


    Wenn ich den code zum aufrufen auf einen Button lege geht es auch nicht.

    MfG

    edit: Tut mir leid, irgendwie formatiert sich immer der code, immer wenn ein paar leerzeichen sind ist das eine neue Zeile.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „vbuser12345“ ()

    Ich würde dir ans Herz legen das du den Code mal richtig formatierst denn so kann man den sogut wie garnicht lesen.
    Zeilemumbrüche machst ganz normal mit "Enter" dann is auch der code lesbar

    *seufz*
    Geh auf den Quellcode-Tab, wenn du Code einfügen willst, dann sollte die Formatierung besser klappen.

    Hier mal dein Code:

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. If TextBox1.Text = ("") Then
    3. MsgBox("Bitte einen Betrag eingeben.")
    4. Exit Sub
    5. Else
    6. If TextBox2.Text = ("") Then
    7. MsgBox("Bitte einen Grund angeben.")
    8. Exit Sub
    9. End If
    10. End If
    11. If Not IsNumeric(TextBox1.Text) Then
    12. MsgBox("Betrag: Nur Zahlen erwünscht.")
    13. TextBox1.Text = ("")
    14. TextBox2.Text = ("")
    15. Else
    16. ListBox1.Items.Add(TextBox2.Text)
    17. ListBox2.Items.Add(TextBox1.Text)
    18. ListBox3.Items.Add(Today)
    19. TextBox2.Text = ("")
    20. TextBox1.Text = ("")
    21. Dim save As String
    22. For i As Integer = 0 To ListBox1.Items.Count - 1
    23. If save = "" Then
    24. save = ListBox1.Items(i)
    25. Else
    26. save = save & vbNewLine & ListBox1.Items(i)
    27. End If
    28. Next
    29. My.Settings.listbox1 = save
    30. End If
    31. End Sub


    VB.NET-Quellcode

    1. Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim laden As New RichTextBox
    3. laden.Text = My.Settings.listbox1
    4. For i As Integer = 0 To laden.Lines.Count - 1
    5. ListBox1.Items.Add(laden.Lines(i))
    6. Next
    7. End Sub



    //
    So, zu der Warnung:

    Mit Dim Save as String = Nothing

    wird der Variablen ein Initialwert zugewiesen, damit wäre das behoben.


    //2
    Und so kannst du den Listboxinhalt als *.txt Datei laden und speichern:

    VB.NET-Quellcode

    1. Dim Pfad As String = Application.StartupPath & "\Listboxinhalt.txt"
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. 'laden
    4. ListBox1.Items.AddRange(IO.File.ReadAllLines(Pfad))
    5. End Sub
    6. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    7. 'Speichern
    8. For Each item As String In ListBox1.Items
    9. My.Computer.FileSystem.WriteAllText(Pfad, item & vbNewLine, True)
    10. Next
    11. End Sub



    Hätte bei der gelegenheit auch noch ne Frage an jemanden, der sich auskennt:
    Wie speichert man das entsprechend mit IO.File? Ich benutze den My-Namespace nämlich bloß wegen dem Append=True.

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

    cool danke, das hat schonmal soweit geklappt. nur das doofe ist, jetzt habe ich vieles doppelt. wenn ich etwas eingebe und das dann in der txt gespeichert wird wird ja nochmal das alte obendrauf geschrieben. so habe ich dann alles viel zu oft. wie bekomme ich das hin, das nichts doppelt da ist, bzw nichts altes übernommen wird?
    ok habe mir selbst geholfen :D

    VB.NET-Quellcode

    1. File.Delete(Application.StartupPath & "\datum.txt")

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vbuser12345“ ()

    Jo, wäre das was ich auch geraten hätte. Um ganz sicher zu gehen, falls es wichtige Daten sind, vor dem Löschen eine *bak Datei anlegen. Zumindest wenn es wichtige Daten sind und der Computer dazu neigt in unvorhersehbaren Intervallen abzustürzen, bevor die Daten neu geschrieben werden konnten. XD