保存并加载动态生成的checkedlistbox项

时间:2014-07-08 13:57:39

标签: vb.net visual-studio-2012

我对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的地方之后,但这也没有用。

1 个答案:

答案 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,

  • 添加了有关清除旧设置的警告,并在恢复循环中添加了注释