我对VB很陌生,所以请耐心等待。在表单加载时,将从数据库中提取值列表,这些值用于生成checkedlistbox项列表。
用户将选择他们想要的复选框,然后单击“保存”,此时选中的项目将存储到system.collections.arraylist类型的用户设置中。
我可以将复选框的值保存到用户设置中,但我在下次打开应用程序时尝试加载保存的设置,但我不确定如何执行此操作。我能够做到的唯一方法只能获得检查项目,这不是我想要的。
以下是我用来保存项目的内容:
Dim list As New ArrayList
For i As Integer = 0 To CheckedListBox1.Items.Count - 1
list.Add(CheckedListBox1.Items(i))
i = i + 1
Next
My.Settings.selectedlistbox = list
My.Settings.Save()
这就是我目前要加载的设置,而这些设置根本不起作用:
Dim counter As Integer
counter = 0
While counter <= My.Settings.selectedlistbox.Count - 1
CheckedListBox1.SetItemChecked(counter, list(counter))
counter = counter + 1
End While
在相关的说明中,我在打开数据库连接的代码之前调用上面的代码,所以我认为这也可能是一个问题,因为我认为复选框赢了&#39 ; t才能被访问,直到他们真正进入应用程序。我尝试将代码放在加载了checkedlistbox的地方之后,但这也没有用。
答案 0 :(得分:1)
假设My.Settings.Useropts
是一个StringCollection,跳过ArrayList:
' CLEAR OUT OLD SELECTIONS so they do not accumulate
My.Settings.Useropts.Clear
' save items checked
For i As Integer = 0 To CheckedListBox1.CheckedIitems.Count - 1
My.Settings.Useropts.Add(CheckedListBox1.CheckedItems(i))
Next
My.Settings.Save()
或迭代checkedindicies集合:
For i As Integer = 0 To CheckedListBox1.CheckedIndicies.Count - 1
My.Settings.Useropts.Add(CheckedListBox1.Items(CheckedIndicies(i))
Next
My.Settings.Save()
' reload from settings
Dim ndx As Integer
For Each s as string in My.Settings.Useropts
ndx = CheckedListBox1.Items.indexOf(s) ' find this string in the list
' if NDX is -1 then the item does not exist;
If ndx <> -1 then
' set the check for the related INDEX, if found:
CheckedListBox1.SetItemChecked(ndx, True)
Else
CheckedListBox1.SetItemChecked(ndx, False)
End If
Next
如果集合中没有默认项,您可能需要在FormLoad上初始化它。 CheckedList框的文本无法更改或找不到项目。
由于Items集合可以存储对象,因此您可以设计一个{Name,Key}类,其中key唯一标识每个项目,Name可能会根据需要更改。存储密钥,然后在CLB中找到它们以设置该项目的检查状态如上
修正SetItemChecked(n,
中的拼写错误 - &gt; `SetItemChecked(NDX,
添加了有关清除旧设置的警告,并在恢复循环中添加了注释