我有一个包含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是“样式”和“值”var是“替代,电子,流行,摇滚”所以我得到了这个:
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
按预期工作,但迭代次数过多
答案 0 :(得分:1)
鉴于您的列表框只包含字符串,那么您可以简单地将字符串读入SelectedItems集合
.....
For Each Item In Value.split(",")
Listbox.SelectedItems.Add(Item)
Next
修改强>
按照下面的评论,我可以建议查看System.Globalization命名空间。
在这里,您可以找到转换为给定字符串
Imports System.Globalization
Dim ti = System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo
For Each Item In Value.split(",")
Listbox.SelectedItems.Add(to.ToTitleCase(Item))
Next