StringArray in My.Settings

  • VB.NET

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

    StringArray in My.Settings

    Hallo Leute,

    sitze gerade vor einem Problem wo ich keine Lösung finde.
    Ich möchte gerne einen Array über String in My.Settings erstellen und diesen mit Daten füllen.

    Die Inhalte werden in einer ListBox angezeigt und können dort verändert werden (einfügen, löschen, sortieren)
    Wie bekomme ich das hin?

    Grüße
    ?(


    Nutze VS 2010
    guck einmal hier
    Da wird gezeigt, wie man ein Dictionary in den Settings anwendet, das geht auch mit einer List usw. ...
    vielleicht kannst du damit etwas anfangen...

    VB.NET-Quellcode

    1. Namespace My
    2. Partial Friend NotInheritable Class MySettings
    3. <System.Configuration.UserScopedSettingAttribute(), _
    4. System.Diagnostics.DebuggerNonUserCodeAttribute(), _
    5. System.Configuration.SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)> _
    6. Public Property TestArray As String()
    7. Get
    8. Return CType(Me("TestArray"), String())
    9. End Get
    10. Set(ByVal value As String())
    11. Me("TestArray") = value
    12. End Set
    13. End Property
    14. End Class
    15. End Namespace
    16. Public Class Form1
    17. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Shown
    18. Dim arr As String() = {"Hallo", "Welt"}
    19. My.Settings.TestArray = arr
    20. End Sub
    21. End Class

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

    Es gibt eine ganz hausbackene Lösung:

    Lies die Listbox aus und hänge die Strings durch jeweils ein Semikolon getrennt aneinander. Diesen String speicherst du in die Settings Variable.

    Und im Load nimmst du den String aus den Settings entgegen, separierst ihn mit Split() und speicherst den array in die Listbox.
    Willkommen im Forum. :thumbup:
    Definiere

    ferro schrieb:

    und diesen mit Daten füllen.
    Soll deis zur Design- oder zur Laufzeit passieren?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hallo nochmal und danke für die regen Antworten.

    Ich möchte das Array zur Design-Zeit initialisieren.

    Der Tip mit Split() habe ich mir schon überlegt. Finde aber, das dies eine umständliche Lösung meines Problems ist.

    Im Array werden Spaltennamen einer Tabelle abgelegt. In der Anwendung kann zur Laufzeit entschieden werden welche Spalten genutzt oder in welcher Reihenfolge diese angezeigt werden. Diese Funktion ist Benutzerabhängig

    Grüße

    ferro schrieb:

    Der Tip mit Split() habe ich mir schon überlegt. Finde aber, das dies eine umständliche Lösung meines Problems ist.
    Wat?
    Es ist ein einziges kleines angehängtes Wörtle - nichtmal eine Zeile.
    Also simpler kriegst dus bestimmt nicht.

    VB.NET-Quellcode

    1. dim _8_strings = "Das°ist°das°Haus°vom°Ni°ko°laus".Split("°"c)
    Hm auch wenn du das mit dem Splitten des Arrays nicht so gut findest nutze ich es eigentlich selbst sehr gerne weil ich es einfach finde und in den meisten Fällen genügt, das splitten mach ich immer so (falls du dich doch für die .Split-Variante entscheidest):

    VB.NET-Quellcode

    1. Option Strict On
    2. Public Class Form1
    3. Dim zwischenspeicher As String
    4. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. Dim input As String = "reihe1zelle1~reihe1zelle2;reihe2zelle1~reihe2zelle2"
    6. For Each part In input.Split(";"c)
    7. zwischenspeicher = part 'Komischer weise muss ich erst jeden Part dem String zuweisen und kann nicht direkt den Array ansprechen ?
    8. Dim parts() = zwischenspeicher.Split("~"c)
    9. MsgBox(parts(0) & "->" & parts(1))
    10. Next
    11. End Sub
    12. End Class
    So mache ich das im FormLoad Event, um meine ListBox zu befüllen:

    VB.NET-Quellcode

    1. Dim strEntries() As String = My.Settings.SAVEDDIRS.Split(";"c)
    2. For i As Integer = 0 To strEntries.GetUpperBound(0)
    3. If strEntries(i) <> "" Then lstSource.Items.Add(strEntries(i))
    4. Next


    Und so speichere ich die Daten im FromClosing Event:

    VB.NET-Quellcode

    1. Dim strSavedDirs As String = ""
    2. For i As Integer = 0 To lstSource.Items.Count - 1
    3. strSavedDirs &= lstSource.Items(i).ToString & ";"
    4. Next
    5. If strSavedDirs = "" Then strSavedDirs = ";"
    6. My.Settings.SAVEDDIRS = strSavedDirs
    7. My.Settings.Save()


    Wenn man es ganz perfekt machen will, speichert man noch zusätzlich den "SelectedIndex". Dann kann man sogar die Position innerhalb der ListBox restaurieren.

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

    Nochmals vielen Dank!

    dim _8_strings = "Das°ist°das°Haus°vom°Ni°ko°laus".Split("°"c)
    Hätte nicht gedacht, dass dies funktioniert. Super TIP, Danke!

    Ich fülle die ListBox etwas anders

    VB.NET-Quellcode

    1. 'Fuellen der ListBox mit allen moeglichen Spalten aus der Tabelle
    2. Dim tbPosdataCol = My.Settings.POSITIONSDATEN_STD.Split(",")
    3. lbPosData.Items.AddRange(tbPosdataCol)
    In deinem Fall würde ich bei den Settings die System.Collections.Spezialized.String.Collection anwenden.
    Dafür ist die genau gemacht und da hast du auch alle Vorzüge der Settings.
    Schaue dir die Member dazu einmal an.

    VB.NET-Quellcode

    1. My.Settings.myStrings.Add("Hallo")
    2. My.Settings.myStrings.Add("Welt")
    3. '
    4. Dim a = My.Settings.myStrings.Item(0)
    5. Dim b = My.Settings.myStrings.Item(1)
    6. '
    7. ListBox1.DataSource = My.Settings.myStrings

    Hier ist myStrings vom Typ System.Collections.Spezialized.String.Collection...