Mit Serialisierung speichern (BinaryFormatter)

    • VB.NET

      Mit Serialisierung speichern (BinaryFormatter)

      Da ich es jetzt nach ein wenig Einarbeitung hinbekommen habe meine Programmdaten über eine Serialisierung zu speichern werde ich hier mal beschreiben wie soetwas abläuft auch wenn auf den zweiten Blick eigendlich nicht viel dahinter steckt.

      Dazu habe ich ein kleines Spiel mit dem Titel: ,,Nur noch 10000 Clicks !!!" geschrieben.
      Ziel des Spieles ist es 10000Mal auf einen Button zu klicken, um dann mit einer MsgBox Meldung belohnt zu werden.
      Also ziemlich aufregend...

      Wird auf den Button Wertänderung gedrückt findet intern eine Wertveränderung zweier Variablen statt, welche dazu führt das sich der Text der Label um den Wert +1 bzw. -1 ändert.
      Falls man das Spiel gerne speichern möchte um dann später an der selben Stelle weiterzumachen sind hierfür zwei weitere Buttons vorgesehen.
      Ansonsten spricht der Quellcode für sich und alles weitere ist durch Kommentare beschrieben.

      Zunächst eine Übersicht über die Programmoberfläche:


      Und der Quellcode:

      VB.NET-Quellcode

      1. 'Es werden die benötigten Namenspace geladen um bestimmte
      2. 'Vorgänge durchführen zu können
      3. Imports System.Runtime.Serialization.Formatters.Binary
      4. Imports System.IO
      5. Public Class Form1
      6. '-------------Variablendeklaration----------
      7. 'Die Variablen für die Serialisierung
      8. Dim bf As New BinaryFormatter()
      9. Dim stream As FileStream
      10. 'In der Variable sind alle Werte aus der Struktur1 zu finden
      11. Public GE As New Struktur1
      12. 'Wenn etwas Serialisiert werden soll muss es mit <Serializable()> gekennzeichnet werden
      13. 'Es wird eine Struktur definiert
      14. <Serializable()> Public Structure Struktur1
      15. 'Wichtig ist das die Werte der Struktur mit Public festgelegt werden
      16. Public Wert1 As Integer
      17. Public Wert2 As Integer
      18. End Structure
      19. '-------------Hauptprogramm-----------------
      20. 'Die Form wird geladen, Grundeinstellungen werden gesetzt
      21. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      22. 'Anfangswerte setzen
      23. GE.Wert1 = 0
      24. GE.Wert2 = 10000
      25. 'Ausgabe in Label
      26. Label1.Text = GE.Wert1
      27. Label2.Text = GE.Wert2
      28. End Sub
      29. 'Der Button zum speichern wurde gedrückt
      30. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      31. 'Öffnen einer Dialogform
      32. Dim sfd As New SaveFileDialog
      33. sfd.InitialDirectory = "C:\Temp"
      34. sfd.Filter = "Alle Dateien (*.*)|*.*"
      35. sfd.Title = "Wählen sie eine Datei zum Speichern aus"
      36. If sfd.ShowDialog = DialogResult.OK Then
      37. MsgBox("Die Datei wird gespeichert")
      38. Else : Exit Sub
      39. End If
      40. 'Filestream zum speichern
      41. stream = New FileStream(sfd.FileName, FileMode.Create)
      42. bf = New BinaryFormatter()
      43. bf.Serialize(stream, GE)
      44. stream.Close()
      45. End Sub
      46. 'Der Button zum öffnen wurde gedrückt
      47. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      48. 'Öffnen einer Dialogform
      49. Dim ofd As New OpenFileDialog
      50. ofd.InitialDirectory = "C:\Temp"
      51. ofd.Filter = "Alle Dateien (*.*)|*.*"
      52. ofd.Title = "Wählen sie eine Datei zum Speichern aus"
      53. If ofd.ShowDialog = DialogResult.OK Then
      54. Else : Exit Sub
      55. End If
      56. 'Vorgänge um die Datei zu erstellen
      57. Dim dat As New FileStream(ofd.FileName, FileMode.Open)
      58. GE = bf.Deserialize(dat)
      59. dat.Close()
      60. 'Die Label werden aktualisiert
      61. Label1.Text = GE.Wert1
      62. Label2.Text = GE.Wert2
      63. End Sub
      64. 'Der Button zur Wertänderung wurde gedrückt
      65. Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
      66. 'Es wird getestet ob die 10000 Clicks schon erfolgt sind
      67. If GE.Wert1 = 10000 Then
      68. MsgBox("Sie haben es geschafft und sind ganz toll, die Anwendung wird jetzt geschlossen")
      69. 'Danach wird die Anwendung geschlossen
      70. Me.Close()
      71. End If
      72. 'Für den Fall das die 10000 Clicks noch nicht
      73. 'erreicht sind findet eine Wertänderung statt
      74. GE.Wert1 += 1
      75. GE.Wert2 -= 1
      76. 'Ausgabe in Label
      77. Label1.Text = GE.Wert1
      78. Label2.Text = GE.Wert2
      79. End Sub
      80. End Class

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Dragonfly“ ()