[Visual Basic 2010 Express] Speichern/Laden

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Berdi.

    [Visual Basic 2010 Express] Speichern/Laden

    Ich bin mir net sicher welche Sprache das ist aber es ist mit Visual Basic 2010 Express gemacht.
    Ich habe folgenden Code um mehrere Zahlen in eine Textdatei zu speichern und aufzurufen, leider lädt er nur die erste Ziffer der Zahl zurück.

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Hund
    3. Dim Hund(2) As String
    4. Private Sub ToolStripButton1_Click_1(sender As System.Object, e As System.EventArgs) Handles ToolStripButton1.Click
    5. Dim GesundheitAnzahl As Integer = CInt(Gesundheit.Text)
    6. Dim FreudeAnzahl As Integer = CInt(Freude.Text)
    7. Hund(1) = CStr(FreudeAnzahl)
    8. Hund(2) = CStr(GesundheitAnzahl)
    9. Dim swHund As New IO.StreamWriter(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Animinis\Hund.txt") 'erstellt einen neuen streamwriter
    10. swHund.WriteLine(Hund(1)) 'schreibt den text des Labels in die datei
    11. swHund.WriteLine(Hund(2))
    12. swHund.Close() 'schließt den streamwriter wieder
    13. Me.Hide()
    14. Start.Show()
    15. End Sub
    16. Private Sub Hund_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    17. Dim GesundheitAnzahl As Integer = CInt(Gesundheit.Text)
    18. Dim FreudeAnzahl As Integer = CInt(Freude.Text)
    19. Hund(1) = CStr(FreudeAnzahl)
    20. Hund(2) = CStr(GesundheitAnzahl)
    21. Dim srHund As New IO.StreamReader(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\Animinis\Hund.txt") 'erstellt einen neuen streamreader
    22. Freude.Text = srHund.ReadLine(CInt(Hund(1))) 'schreibt den text ins Label
    23. Gesundheit.Text = srHund.ReadLine(CInt(Hund(2)))
    24. srHund.Close() 'schließt den streamreader wieder
    25. End Sub
    26. End Class

    Wie kann ich das zurückladen richtig machen? (Speichern tut er die richtige Zahl!)
    Edit: Wenn es Essentiell ist ob z.B. Freude ein Label oder eine Textbox etc. sind dann schreib ich den code mal mit den richtigen bezeichnungen
    Ich verstehe nicht einmal, warum das bei dir überhaupt läuft.

    Dim Hund(2) As String ist ein nullbasiertes Array.
    Das besteht aus Hund(0) und Hund(1).

    Dein Code müsste eigentlich spätestens bei
    Hund(2) = CStr(GesundheitAnzahl)
    auf einen OutOfArray-Fehler laufen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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

    Entweder du indizierst das Array mit 0 und 1.
    Oder du definierst das Array von 1 bis 2 Dim Hund(1 To 2).

    Oder du machst es gleich richtig und machst ein Objektmodell aus der ganzen Sache.
    Mit einer Klasse Hund mit den Properties Freude und Gesundheit.
    Und einer List(Of Hund), die du XML-serialisierst und -deserialisierst.
    Aber wenn ich deinen Code betrachte, wird dich dieser Schritt wohl überlasten.

    PS: Läuft dein publizierter Code bei dir?
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    PS: Läuft dein publizierter Code bei dir?

    Also wenn du meinst das er ausgeführt wird? Ja er speichert auch 2 stellige Zahlen er lädt sie aber nicht wieder zurück

    petaod schrieb:

    Entweder du indizierst das Array mit 0 und 1.

    Also wenn ich die 1 durch 0 und die 2 durch 1 ersetze bringt das auch nichts

    petaod schrieb:

    Oder du definierst das Array von 1 bis 2 Dim Hund(1 To 2)

    Das ist nicht möglich

    petaod schrieb:

    Oder du machst es gleich richtig und machst ein Objektmodell aus der ganzen Sache.
    Mit einer Klasse Hund mit den Properties Freude und Gesundheit.
    Und einer List(Of Hund), die du XML-serialisierst und -deserialisierst.
    Aber wenn ich deinen Code betrachte, wird dich dieser Schritt wohl überlasten.

    Jap

    Berdi schrieb:

    Das ist nicht möglich
    Ja. Hab's getestet. Ich war auch irgendwie auf dem VB6-Dampfer.
    VB.Net speichert tatsächlich Die Elemente 0, 1 und 2.

    Probier mal

    VB.NET-Quellcode

    1. Private Sub Hund_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    2. If IO.File.Exists(Environment.SpecialFolder.MyDocuments) & "\Animinis\Hund.txt") Then
    3. Dim srHund As New IO.StreamReader(Environment.SpecialFolder.MyDocuments) & "\Animinis\Hund.txt") 'erstellt einen neuen streamreader
    4. Hund(1) = srHund.ReadLine
    5. Hund(2) = srHund.ReadLine
    6. Freude.Text = Hund(1)
    7. Gesundheit.Text = Hund(2)
    8. srHund.Close() 'schließt den streamreader wieder
    9. End If
    10. End Sub
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

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