Hi Ron,
you can add in Settings a place holder for string:
And in code behind in Form.Load extract "ClbList" to list of Data, insert Items and in Form.Closing build new list of Data, serialize to XML and save this list in Settings. Try following demo (insert code in empty form):
Imports System.IO
Imports System.Xml.Serialization
Public Class Form1
Private Clb As New CheckedListBox With {.Dock = DockStyle.Fill}
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Controls.Add(Clb)
Dim s As String = My.Settings.ClbList
Dim l As List(Of Data)
' for first start generate demo data '
If String.IsNullOrEmpty(s) Then
Dim rnd As New Random
l = New List(Of Data)
For i = 1 To 10
l.Add(New Data With {.CB = rnd.NextDouble < 0.5, .TXT = $"Item {i}"})
Next
Else
' load data from struing in Settings '
l = CType(New XmlSerializer(GetType(List(Of Data))).Deserialize(New StringReader(s)), List(Of Data))
End If
For Each item In l
Dim i = Me.Clb.Items.Add(item)
Me.Clb.SetItemCheckState(i, If(item.CB, CheckState.Checked, CheckState.Unchecked))
Next
End Sub
Public Class Data
Public Property CB As Boolean
Public Property TXT As String
Public Overrides Function ToString() As String
Return Me.TXT
End Function
End Class
Private Sub Form1_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
Dim l As New List(Of Data)
For i = 0 To Me.Clb.Items.Count - 1
Dim item As Data = CType(Me.Clb.Items(i), Data)
item.CB = Me.Clb.GetItemCheckState(i) = CheckState.Checked
l.Add(item)
Next
Dim wrt As New StringWriter()
Call New XmlSerializer(GetType(List(Of Data))).Serialize(wrt, l)
wrt.Close()
My.Settings.ClbList = wrt.ToString
My.Settings.Save()
End Sub
End Class