List View mit Username Passwort speichern/laden

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von VaporiZed.

    List View mit Username Passwort speichern/laden

    Hallo Guten Abend,

    Ich hätte gerne eine List View mit Username und Passwort.
    Die dann wie folgt in einer .txt gespeichert/geladen wird:

    Username1:Passwort1
    Username2:Passwort2


    Habe leider das Problem das der Username immer zweimal gespiechert wird und das am Ende immer noch ein : hinzugefügt wird...
    Es ist schon spät ich blicke einfach nicht mehr durch könnte mir jemand sagen wiso sich das ganze so verhält. :sleeping:
    Ich werde die Daten zur weiteren Verarbeitung benötigen, ist es möglich diese später als Usernames und Passwords in zwei Text Variablen weiterzugeben?



    Der Code stammt von Mangafreak1995 aus dem Thread: ListView Inhalt - Speichern bzw. Laden und ist minimal abgeändert.
    (Ganzes Projekt ist als .zip zum Download verfügbar einfach runter scrollen)

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub BTLoad_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTLoad.Click
    3. If Open.ShowDialog = Windows.Forms.DialogResult.OK Then ListViewLoad(ListView1, Open.FileName)
    4. End Sub
    5. Private Sub BTSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTSave.Click
    6. If Save.ShowDialog = Windows.Forms.DialogResult.OK Then ListViewSave(ListView1, Save.FileName)
    7. End Sub
    8. Private Sub BTAddd_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTAddd.Click
    9. Dim s As String = InputBox("Adding value")
    10. If s <> "" Then ListView1.Items.Add(s).SubItems.Add(TextBox1.Text)
    11. End Sub
    12. Private Sub BTDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTDelete.Click
    13. For Each item As ListViewItem In ListView1.SelectedItems
    14. ListView1.Items.Remove(item)
    15. Next
    16. End Sub
    17. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    18. With Open
    19. .Filter = "All Files|*.*"
    20. .Multiselect = False
    21. End With
    22. Save.Filter = "All Files|*.*"
    23. End Sub
    24. Public Function ListViewLoad(ByRef LstVw As ListView, ByVal Path As String)
    25. Dim sLine As String
    26. Dim sItem() As String
    27. Dim ItemX As ListViewItem
    28. Dim IntCols As Integer
    29. IntCols = LstVw.Columns.Count
    30. FileOpen(1, Path, OpenMode.Input)
    31. With LstVw.Items
    32. While Not EOF(1)
    33. sLine = LineInput(1)
    34. sItem = Split(sLine, ":")
    35. ItemX = .Add(sItem(0), sItem(1))
    36. End While
    37. End With
    38. FileClose(1)
    39. End Function
    40. Public Function ListViewSave(ByRef LstVw As ListView, ByVal Path As String)
    41. Dim ListViewContent As String = ""
    42. For I As Integer = 0 To LstVw.Items.Count - 1
    43. ListViewContent += LstVw.Items.Item(I).Text & ":"
    44. For Int As Integer = 0 To LstVw.Items.Item(I).SubItems().Count - 1
    45. ListViewContent += LstVw.Items.Item(I).SubItems(Int).Text & ":"
    46. Next
    47. ListViewContent += vbNewLine
    48. Next
    49. If System.IO.File.Exists(Path) Then
    50. System.IO.File.Delete(Path)
    51. End If
    52. System.IO.File.AppendAllText(Path, ListViewContent)
    53. End Function
    54. End Class

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

    VapeNation schrieb:

    Es ist schon spät ich blicke einfach nicht mehr durch könnte mir jemand sagen wiso sich das ganze so verhält.
    Bei ListViewItem ist die ListViewItem.Text-Property identisch mit der ListViewItem.SubItems(0).Text-Property.
    Daher kommt derselbe Wert zweimal in die Ausgabe, nämlich in Zeile #52, als LstVw.Items.Item(I).Text, und in Zeile #54 nochmal, nämlich wenn Int im ersten Schleifendurchlauf den Wert 0 hat.
    Lösung: lösche zeile #52



    Ansonsten ist der Code stark verbesserungsbedürftig - in vielen Punkten.
    Einzig das Form_Load könnte man belassen.
    Steht ja auch in Zeile#54: Immer einen Doppelpunkt anhängen.
    Umgehung: prüfen, ob I < LstVw.Items.Item(I).SubItems().Count - 1, dann nen Doppelpunkt anhängen.
    besser: mit String.Join arbeiten

    Wenn Du U1 von Pass1 trennen willst: dafür gibt's String.Split (und zwar die VB.Net-Variante, nicht die aus VB6!)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht in den Spekulatiusmodus gehen.