benutzerdefinierte Liste in den Settings speichern

    • VB.NET

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

      benutzerdefinierte Liste in den Settings speichern

      Hallo Community

      Ich habe durch Herumprobieren eine Methode gefunden, wie man beliebige Listen in den Settings speichern kann.
      Dazu braucht man eine Klasse, wie unten angeführtes Schema-Beispiel zeigt (kann eine DataList mit beliebigen Property's sein)...

      VB.NET-Quellcode

      1. Public Class Datas
      2. Public Property DataList() As New List(Of DataList(Of Integer, String, String))
      3. End Class
      4. Public Class DataList(Of T1, T2, T3)
      5. Public Property ID As T1
      6. Public Property User As T2
      7. Public Property Place As T3
      8. Sub New()
      9. End Sub
      10. End Class

      Mit dem XML-Editor die Datei Settings.settings öffnen und die Klasse angeben (siehe Zeile 8-10) und speichern.
      In den Settings bei den Einstellungen ist dann der neue Eintrag angeführt...

      VB.NET-Quellcode

      1. <?xml version='1.0' encoding='utf-8'?>
      2. <SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="My" GeneratedClassName="MySettings" UseMySettingsClassName="true">
      3. <Profiles />
      4. <Settings>
      5. <Setting Name="Versuch" Type="System.String" Scope="User">
      6. <Value Profile="(Default)">blablabla</Value>
      7. </Setting>
      8. <Setting Name="Daten" Type="CustomSettings.Datas" Scope="User">
      9. <Value Profile="(Default)"></Value>
      10. </Setting>
      11. </Settings>
      12. </SettingsFile>

      Danach kann man diese Eigenschaftseinstellung wie gewohnt bedienen (siehe angehängtes Sample).
      Vielleicht kann es wer brauchen...
      Ich weis nur nicht, wo und wie die Daten in der Application gehalten werden :?:
      Bilder
      • CustomSettings.jpg

        27,33 kB, 985×198, 344 mal angesehen
      • Settings.jpg

        27,45 kB, 270×277, 322 mal angesehen
      Dateien

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VB1963“ ()

      Erweiterung zu 'benutzerdefinierte Settings'

      Hier habe ich noch eine weitere (elegantere) Lösung zu obigen Vorgehen ergoogelt:
      Es wird hier nicht mehr in der XML-Datei Settings.settings herumgefummelt.
      Sondern:
      Man geht auf die Seite Einstellungen. Beim Anwählen des Menüpunkts 'Code anzeigen' (siehe Bild im Anhang)
      wird im My-Namespace eine Partial Class des Designercodes erzeugt, in der man dann seine eigenen Eigenschaften definieren kann...
      siehe Zeile 10 bis 20 :

      VB.NET-Quellcode

      1. Namespace My
      2. 'Diese Klasse ermöglicht die Behandlung bestimmter Ereignisse der Einstellungsklasse:
      3. ' Das SettingChanging-Ereignis wird ausgelöst, bevor der Wert einer Einstellung geändert wird.
      4. ' Das PropertyChanged-Ereignis wird ausgelöst, nachdem der Wert einer Einstellung geändert wurde.
      5. ' Das SettingsLoaded-Ereignis wird ausgelöst, nachdem die Einstellungswerte geladen wurden.
      6. ' Das SettingsSaving-Ereignis wird ausgelöst, bevor die Einstellungswerte gespeichert werden.
      7. Partial Friend NotInheritable Class MySettings
      8. <System.Configuration.UserScopedSettingAttribute(), _
      9. DebuggerNonUserCodeAttribute(), _
      10. System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)> _
      11. Public Property Daten As Datas
      12. Get
      13. Return CType(Me("Daten"), Datas)
      14. End Get
      15. Set(ByVal value As Datas)
      16. Me("Daten") = value
      17. End Set
      18. End Property
      19. End Class
      20. End Namespace
      Zeile 12 gibt hier z.B. das Attribut für die binäre Serialisierung der Eigenschaft an...
      Wichtig: die ursprüngliche Datenklasse muss unbedingt mit dem Serializable-Attribut erweitert werden!
      (siehe Zeile 1 und 6 im unten angeführten Codeabschnitt)

      VB.NET-Quellcode

      1. <Serializable()>
      2. Public Class Datas
      3. Public Property DataList() As New List(Of DataList(Of Integer, String, String))
      4. End Class
      5. <Serializable()>
      6. Public Class DataList(Of T1, T2, T3)
      7. Public Property ID As T1
      8. Public Property User As T2
      9. Public Property Place As T3
      10. Sub New()
      11. End Sub
      12. End Class
      In den Einstellungen erscheint diese neu erstellte Eigenschaft aber nicht...
      Bilder
      • CodeSettings.JPG

        50,91 kB, 757×278, 314 mal angesehen
      Dateien

      Ergänzung zu den Listen in Settings

      Man kann auch die internen Listen zur Speicherung angeben, wie ein List(Of T):
      (ein Dictionary lässt sich leider so nicht mit den Settings speichern...)

      VB.NET-Quellcode

      1. Namespace My
      2. Partial Friend NotInheritable Class MySettings
      3. ''' <summary>
      4. ''' Settingseigenschaft zum Beispiel für irgendwelche interne Daten
      5. ''' </summary>
      6. ''' <value></value>
      7. ''' <returns></returns>
      8. ''' <remarks></remarks>
      9. <System.Configuration.UserScopedSettingAttribute(), _
      10. System.Diagnostics.DebuggerNonUserCodeAttribute(), _
      11. System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Binary)> _
      12. Public Property Internals As List(Of Data)
      13. Get
      14. Return CType(Me("Internals"), List(Of Data))
      15. End Get
      16. Set(ByVal value As List(Of Data))
      17. Me("Internals") = value
      18. End Set
      19. End Property
      20. End Class
      21. End Namespace
      22. <Serializable()>
      23. Public Class Data
      24. Public Property Fach As String
      25. Public Property Note As Integer
      26. Sub New() 'muss angegeben werden, sonst wird's nicht serialisiert!
      27. End Sub
      28. Sub New(Fach As String, Note As Integer)
      29. Me.Fach = Fach
      30. Me.Note = Note
      31. End Sub
      32. End Class

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

      benutzerdefinierter SettingsProvider

      Im folgenden Thread (serialisiertes Setting) wird gezeigt, wie man ein eigenes Setting mit Einbindung eines eigenen SettingProviders, der die Property's verschlüsselt serialisiert, entwirft...
      Bzw. im Sourcecode-Austausch habe ich auch den Provider und Abwandlungen davon eingestellt: UserSettingsProvider (Persistieren von UserSettings)
      Siehe anbei ein lauffähiges und offenes Testprojekt mit der CryptoSettingsProvider-Library...
      Dateien

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