Inhalt aus mehreren Textboxen in 1 Datei speichern und beim starten laden.

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von MB-Tech.

    Inhalt aus mehreren Textboxen in 1 Datei speichern und beim starten laden.

    Moin Community,

    ich habe gestern mit VB 2010 angefangen und bin soweit eigentlich begeistert und möchte auch dran bleiben an VB.
    Ich bin gerade dabei einen Keybinder zu erstellen. Ich möchte allerdings, dass wenn man auf speichern klickt, allle Inhalte aus den 10 Textboxen in 1 Datei gespeichert werden.
    Aktuell speichert er bei mir nämlich nur den Inhalt aus der letzten also aus der 10. Textbox. Und das mit dem laden habe ich auch noch nicht raus.

    Könnt ihr mir helfen?

    PS: Hier mein bisheriger Code:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Integer) As Short
    3. Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
    4. End Sub
    5. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    6. If GetAsyncKeyState(Keys.D1) Then
    7. SendKeys.Send("t" + TextBox1.Text + "{ENTER}")
    8. End If
    9. If GetAsyncKeyState(Keys.D2) Then
    10. SendKeys.Send("t" + TextBox2.Text + "{ENTER}")
    11. End If
    12. If GetAsyncKeyState(Keys.D3) Then
    13. SendKeys.Send("t" + TextBox3.Text + "{ENTER}")
    14. End If
    15. If GetAsyncKeyState(Keys.D4) Then
    16. SendKeys.Send("t" + TextBox4.Text + "{ENTER}")
    17. End If
    18. If GetAsyncKeyState(Keys.D5) Then
    19. SendKeys.Send("t" + TextBox5.Text + "{ENTER}")
    20. End If
    21. If GetAsyncKeyState(Keys.D6) Then
    22. SendKeys.Send("t" + TextBox6.Text + "{ENTER}")
    23. End If
    24. If GetAsyncKeyState(Keys.D7) Then
    25. SendKeys.Send("t" + TextBox7.Text + "{ENTER}")
    26. End If
    27. If GetAsyncKeyState(Keys.D8) Then
    28. SendKeys.Send("t" + TextBox8.Text + "{ENTER}")
    29. End If
    30. If GetAsyncKeyState(Keys.D8) Then
    31. SendKeys.Send("t" + TextBox8.Text + "{ENTER}")
    32. End If
    33. If GetAsyncKeyState(Keys.D9) Then
    34. SendKeys.Send("t" + TextBox9.Text + "{ENTER}")
    35. End If
    36. If GetAsyncKeyState(Keys.D0) Then
    37. SendKeys.Send("t" + TextBox10.Text + "{ENTER}")
    38. End If
    39. End Sub
    40. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    41. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox1.Text, False)
    42. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox2.Text, False)
    43. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox3.Text, False)
    44. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox4.Text, False)
    45. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox6.Text, False)
    46. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox7.Text, False)
    47. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox8.Text, False)
    48. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox9.Text, False)
    49. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox10.Text, False)
    50. MessageBox.Show("Keybinds erfolgreich gespeichert!", "luma's Keybinder 0.1", MessageBoxButtons.OK, MessageBoxIcon.None)
    51. End Sub
    52. End Class

    luma schrieb:

    Ich möchte allerdings, dass wenn man auf speichern klickt, allle Inhalte aus den 10 Textboxen in 1 Datei gespeichert werden.

    Dann musst Du Dir wohl überlegen, wie Du die Inhalte der TextBoxen voneinander abgrenzt, schliesslich enthalten ja alle Strings. Du kannst entweder einen von Dir nicht verwendeten Character (z.B. |) verwenden oder jede Textbox in eine eigene Zeile schreiben.

    luma schrieb:

    Aktuell speichert er bei mir nämlich nur den Inhalt aus der letzten also aus der 10. Textbox.

    Das ist auch kein Wunder weil Du ja beim Schreiben

    VB.NET-Quellcode

    1. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox6.Text, False)
    immer den Parameter 'False' mitgibst. Dieser gibt an ob der Inhalt an die Datei anghehängt werden soll oder den alten Inhalt überschreiben soll, siehe MSDN Beschreibung

    Für das Laden gibt es dann wieder verschiedene Möglichkeiten: entweder auch mit ReadAllText , wonach Du den Text allerdings wieder in die einzelnen TextBox-Segmente splitten musst. Oder Du liest die Datei zeilenweise mit dem StreamReader und füllst die Textboxen so.

    VB.NET-Quellcode

    1. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox6.Text, False)


    ich möchte ja auch, dass der inhalt der textboxen überschrieben, und nicht dan gehängt wird.
    und ich hatte eigentlich vorgehabt den inhalt jeder textbox in eine eigene zeile zu schreiben. nur wie ich da hinkomme, weiß ich nicht.
    könntest du mir da vllt nen kleinen schubser in die richtige richtung geben?

    VB.NET-Quellcode

    1. My.Computer.FileSystem.WriteAllText("luma-kb.txt", TextBox6.Text, False)

    überschreibt aber immer den Inhalt Deiner Datei "luma-kb.txt" neu - und das wolltest Du ja wohl nicht.

    Zum zeilenweisen Arbeiten nimm lieber den StreamWriter, umfangreich beschrieben hier im Galileo Openbook

    VB.NET-Quellcode

    1. ' neuen streamwriter anlegen
    2. Dim sw As New StreamWriter("luma-kb.txt")
    3. ' Textbox1 als zeile schreiben
    4. sw.WriteLine(TextBox1.Text)
    5. ' Textbox2 als zeile schreiben
    6. sw.WriteLine(TextBox2.Text)
    7. ....
    8. ' close nicht vergessen
    9. sw.close

    Zum Lesen nimmst Du dann dementsprechend den StreamReader, netterweise auch beschrieben hier im Openbook

    luma schrieb:

    ich meinte das import statement

    Mit dem Imports Statement definierst Du überhaupt nichts, es erlaubt Dir nur statt System.IO.Streamreader die Abkürzung StreamReader zu verwenden.

    Für das Wiederherstellen der Textbox-Texte schreibst Du Deinen Code am Besten in das Load Event Deiner Form. Wie macht man das ? Im Designer Deine Form aufrufen, dann rechts bei den Eigenschaften auf den "Blitz" klicken, dort bekommst Du dann alle zur Verfügung stehenden Events für Deine Form angezeigt. Per Doppelclick auf das Load Event legt der Designer Dir eine entsprechende Methode im Code an.

    Die Sache mit dem StreamReader wirst Du aber alleine hinbekommen ...
    das speichern klappt schon mal, vielen dank dafür.
    das laden klappt nicht 100%.

    wenn ich meinen keybinder öffnet, lädt er immer nur die 1. Zeile. Nichts weiter.
    In de Datei allerdings sind alle zeilen gespeichert.

    Hier der Code zum Laden:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. Dim sr As New StreamReader("luma-kb.txt")
    3. TextBox1.Text = sr.ReadLine()
    4. TextBox2.Text = sr.ReadLine()
    5. TextBox3.Text = sr.ReadLine()
    6. TextBox4.Text = sr.ReadLine()
    7. TextBox5.Text = sr.ReadLine()
    8. TextBox6.Text = sr.ReadLine()
    9. TextBox7.Text = sr.ReadLine()
    10. TextBox8.Text = sr.ReadLine()
    11. TextBox9.Text = sr.ReadLine()
    12. TextBox10.Text = sr.ReadLine()
    13. sr.Close()
    14. End Sub


    ich komme leider nicht weiter. könnt ihr mir helfen?
    ich habe gestern mit VB 2010 angefangen

    Ist ja schon kurios, dass man da schon mit API und Sendkeys etc. arbeitet. Glaube kaum, dass der User auch nur ansatzweise etwas kapiert.

    LG