0

我有一个具有 100-200 个默认值的列表框,并且启用了多选简单模式。

我将选定的文本项保存在字符串列表中:

Private Sub ListBox_Styles_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBox_Styles.SelectedIndexChanged

    Styles_List.Clear()

    For Each item In ListBox_Styles.SelectedItems : Styles_List.Add(item) : Next

    Save_INI_settings()

End Sub

之后,子调用“Save_INI_settings”过程,然后我将值保存到 INI 文件中,如下所示:

WriteINIFile.WriteLine("Styles=" & String.Join(",", Styles_List.ToArray))

...产生这个结果:

Styles=Alternative,Electro,Pop,Rock

现在,在我的应用程序的下一次加载中,我如何通过选择 ini 的文本值来设置列表框选定项?

这就是我加载 INI 设置的方式:

    If ValueName = "Styles".ToLower Then
        For Each Item In Value.split(",")
            ' ListBox_Styles.SetSelected(Item, True)
        Next
    End If

...其中“ValueName” var 是“Styles”,“Value” var 是“Alternative,Electro,Pop,Rock”,所以对于我来说:

Alternative
Electro
Pop
Rock

PS:我不想将索引整数保存在 INI 文件中而不是文本项中,我也不想将此设置存储在应用程序设置部分中。

UPDATE:

这就是我现在的做法:

If ValueName = "Styles".ToLower Then
   For Each Item In Value.split(",")
 ' Try to add the string as is
   ListBox_Styles.SelectedItems.Add(Item)
 ' Try to add the string as TitleCase
   ListBox_Styles.SelectedItems.Add(Char.ToUpper(Item(0)) + StrConv(Item.Substring(1), VbStrConv.Lowercase))
 ' Try to add the string as WordCase
ListBox_Styles.SelectedItems.Add(System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Item))

   Next
End If

按预期工作,但迭代次数过多

4

1 回答 1

1

鉴于您的列表框仅包含字符串,那么您可以简单地将字符串读取到 SelectedItems 集合中

   .....
   For Each Item In Value.split(",")
        Listbox.SelectedItems.Add(Item)     
   Next

编辑
在下面的评论之后,我可以建议查看 System.Globalization 命名空间。在这里您可以找到将给定字符串转换为正确大小写的方法TextInfo.ToTitleCase

   Imports System.Globalization

   Dim ti = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo
   For Each Item In Value.split(",")
      Listbox.SelectedItems.Add(to.ToTitleCase(Item))
   Next
于 2013-05-22T15:43:48.650 回答