Endgültige Lösung: Import/Export My.Settings (auch andere Datentypen als String)

    • VB.NET

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

      Endgültige Lösung: Import/Export My.Settings (auch andere Datentypen als String)

      Hallo Leute,

      ich habe heute den ganzen Tag damit verbracht herauszufinden, wie man die Einstellungen der My.Settings exportiert und importiert. Ich habe viele Codeschnipsel gefunden, jedoch setzten alle String-Typen in den My.Settings voraus.

      Ich speichere in "meinen" My.Settings aber auch Boolean, Integer, Double und System.Color Datentypen ab (siehe Screenshot).

      Da ich bisher hier im Forum immer nur "fragend" unterwegs war, möchte ich heute einmal eine Lösung posten, die sicherlich schon viele gesucht haben. Mit folgendem Code kann man alle Datentypen exportieren und importieren. Bei Bedarf lassen sich in der Select Case Anweisung auch noch weitere Datentypen hinzufügen:

      VB.NET-Quellcode

      1. Imports System
      2. Imports System.IO
      3. Public Module mdl_Einstellungen
      4. ''' <summary>
      5. ''' Exportiert My.Settings in eine Textdatei und berücksichtigt auch andere Datentypen als String
      6. ''' </summary>
      7. ''' <remarks></remarks>
      8. Public Sub ExportSettings(Filename As String)
      9. If Filename = "" Then Filename = Path.Combine(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, "FlexX.config")
      10. Dim Divider As String = ";"
      11. Using sWriter As New StreamWriter(Filename)
      12. For Each Setting As System.Configuration.SettingsPropertyValue In My.Settings.PropertyValues
      13. sWriter.WriteLine(Setting.Property.PropertyType.ToString & Divider & Setting.Name & Divider & Setting.SerializedValue)
      14. Next
      15. End Using
      16. My.Settings.Save()
      17. End Sub
      18. ''' <summary>
      19. ''' Importiert My.Settings aus einer Textdatei und berücksichtigt auch andere Datentypen als String
      20. ''' </summary>
      21. ''' <remarks></remarks>
      22. Public Sub ImportSettings(Filename As String)
      23. If Filename = "" Then Filename = Path.Combine(My.Computer.FileSystem.SpecialDirectories.CurrentUserApplicationData, "FlexX.config")
      24. If IO.Directory.Exists(Filename) = False Then Exit Sub 'nichts laden, wenn die Datei nicht existiert
      25. Dim Divider As String = ";"
      26. Using sReader As New StreamReader(Filename)
      27. While sReader.Peek() > 0
      28. Dim Input = sReader.ReadLine()
      29. Dim DataSplit = Input.Split(CChar(Divider))
      30. Select Case DataSplit(0)
      31. Case "System.Boolean"
      32. My.Settings(DataSplit(1)) = CBool(DataSplit(2))
      33. Case "System.String"
      34. My.Settings(DataSplit(1)) = DataSplit(2)
      35. Case "System.Int32"
      36. My.Settings(DataSplit(1)) = CInt(DataSplit(2))
      37. Case "System.Double"
      38. My.Settings(DataSplit(1)) = CDbl(DataSplit(2))
      39. Case "System.Drawing.Color"
      40. My.Settings(DataSplit(1)) = Color.FromName(DataSplit(2))
      41. 'Hier kann man weitere Datentypen einbinden
      42. End Select
      43. End While
      44. End Using
      45. My.Settings.Save()
      46. End Sub
      47. End Module


      Der Import und Export Routine kann man einen Dateinamen übermitteln, wenn man den Import und Export in eine bestimmte Datei machen möchte. Wird kein Dateiname angegeben, so werden die Daten in das lokale User-Verzeichnis exportiert. Das kann sich natürlich jeder abändern wie er möchte.

      Für meine Anwendung ist das so aber ok, da jede Kassenstation ihre eigenen Settings haben sollte. Auch wäre es denkbar, dass mehrere Windows-User angelegt sind und jeder User seine eigenen individuellen Einstellungen hat.

      Der Vorteil der Import- und Export Methode liegt daran, dass unabhängig von einer neuen Programmversion oder einer Neuinstallation vorhandene Konfigurationen rasch importiert werden können. Ich lese die Datei beim Start meiner Anwendung aus und schreibe diese beim Beenden der Anwendung.

      LG Roland
      Bilder
      • export.jpg

        272,37 kB, 594×414, 467 mal angesehen
      • Einstellungen.jpg

        139,78 kB, 402×371, 444 mal angesehen
      Liebe Grüße
      Roland Berghöfer

      Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
      Ich habe meinen Code noch etwas verändert, da das Speichern und einlesen des Datatypes "System.Drawing.Color" noch nicht einwanffrei funktionierte. Hier der komplette Code für Import und Export zur freien Verwendung.

      (der erste Teil mit dem Dateinamen ist in meinem Fall für meine Anwendung spezifisch, die müsstet Ihr für Eure Bedürfnisse umschreiben)

      Spoiler anzeigen

      VB.NET-Quellcode

      1. Imports System
      2. Imports System.IO
      3. Public Module mdl_Einstellungen
      4. ''' <summary>
      5. ''' Exportiert My.Settings in eine Textdatei und berücksichtigt Boolean, Color, String, Integer und Double Werte
      6. ''' </summary>
      7. ''' <param name="Filename"></param>
      8. ''' <remarks></remarks>
      9. Public Sub ExportSettings(Filename As String)
      10. If Filename = "" Then Filename = Path.Combine(FlexX_Datenverzeichnis, "FlexX.config") 'nach Bedarf abändern
      11. Dim Divider As String = ";"
      12. Using sWriter As New StreamWriter(Filename)
      13. For Each Setting As System.Configuration.SettingsPropertyValue In My.Settings.PropertyValues
      14. If Setting.Property.PropertyType.ToString = "System.Drawing.Color" Then
      15. sWriter.WriteLine(Setting.Property.PropertyType.ToString & Divider & Setting.Name & Divider & (Setting.PropertyValue.toargb).ToString)
      16. Else
      17. sWriter.WriteLine(Setting.Property.PropertyType.ToString & Divider & Setting.Name & Divider & Setting.SerializedValue)
      18. End If
      19. Next
      20. End Using
      21. My.Settings.Save()
      22. End Sub
      23. ''' <summary>
      24. ''' Importer My.Settings in eine Textdatei und berücksichtigt Boolean, Color, String, Integer und Double Werte
      25. ''' </summary>
      26. ''' <param name="Filename"></param>
      27. ''' <remarks></remarks>
      28. Public Sub ImportSettings(Filename As String)
      29. 'ohne Quelldatei kein Rücksichern
      30. If FlexX_Datenverzeichnis = "" Then Exit Sub
      31. If Filename = "" Then Filename = Path.Combine(FlexX_Datenverzeichnis, "FlexX.config")
      32. If IO.File.Exists(Filename) = False Then Exit Sub 'nichts laden, wenn die Datei nicht existiert
      33. 'Standardwerte zurücksetzen
      34. My.Settings.Reset()
      35. My.Settings.Save()
      36. Dim Divider As String = ";"
      37. Using sReader As New StreamReader(Filename)
      38. While sReader.Peek() > 0
      39. 'Zeile aus Datei einlesen
      40. Dim Input = sReader.ReadLine()
      41. 'Elemente/Werte in Array aufsplitten
      42. Dim DataSplit = Input.Split(CChar(Divider))
      43. Select Case DataSplit(0)
      44. Case "System.Boolean"
      45. My.Settings(DataSplit(1)) = CBool(DataSplit(2))
      46. Case "System.String"
      47. My.Settings(DataSplit(1)) = DataSplit(2)
      48. Case "System.Int32"
      49. My.Settings(DataSplit(1)) = CInt(DataSplit(2))
      50. Case "System.Double"
      51. My.Settings(DataSplit(1)) = CDbl(DataSplit(2))
      52. Case "System.Drawing.Color"
      53. My.Settings(DataSplit(1)) = Color.FromArgb(CInt(DataSplit(2)))
      54. 'Hier kann man weitere Datentypen einbinden
      55. End Select
      56. End While
      57. End Using
      58. My.Settings.Save()
      59. End Sub
      60. End Module
      Liebe Grüße
      Roland Berghöfer

      Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
      Der Code ist eine große Hilfe, da wir im Netzwerk oft Probleme mit servergespeicherten Profilen (inkl. Ordnerumleitung) haben, danach sind die Einstellung von my.Settings öfter wieder im Urzustand gewesen. Dank des Export und Import bleibt den Usern das aufwändige Einstellen ihrer Scan-to-Folder-Umgebung erspart.

      Danke

      :)
      Hallo dive26!

      Wenn ich aber eine StringCollection nach txt exportiert habe und diese nun importieren möchte, was steht in dem Fall dann hinter dem Gleichheitszeichen unten?

      Case "System.Collections.Specialized.StringCollection"
      My.Settings(DataSplit(1)) = ???

      Danke !!
      @Tweety2016
      Ich denke, das hast Du mich per Email gefragt?
      Das geht so nicht - da muss man sich eine eigene "Collection" bauen und beim einlesen wieder manuell zusammenstückeln.
      Liebe Grüße
      Roland Berghöfer

      Meine aktuellen und kostenlos verwendbaren Tools (mit VB.NET erstellt): freeremarkabletools.com | priconman.com | SimpleCalendar | AudibleTouch | BOComponent.com | bonit.at
      Ich habe viele Codeschnipsel gefunden, jedoch setzten alle String-Typen in den My.Settings voraus.​

      Meinen UserSettingsProvider habe ich zwar 1 Monat nach deiner Veröffentlichung gepostet - der macht in die gleiche Richtung aber halt mit verschiedenen Datentypen...
      Vlt. kannst du das einmal gebrauchen...