【问题标题】:Set ListBox selecteditems by the ItemText?通过 ItemText 设置 ListBox selecteditems?
【发布时间】:2013-05-17 17:51:55
【问题描述】:

我有一个具有 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

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

【问题讨论】:

    标签: .net vb.net string listbox ini


    【解决方案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
    

    【讨论】:

    • 感谢您的回答,但如果任何值为 lowerstring 且列表框项为 Wordcase,例如 INI 值:“rock”和列表框项值:“Rock”,则它会失败,您知道我该怎么做在那种情况下做吗?一个忽略还是什么?
    • 那么,换案的原因是什么?如果可能的话,我在编写 INI 文件时不会更改大小写,否则,在 Globalization 命名空间中有一个方法可以恢复字符串的正确大小写。让我检查一下,我会更新答案
    • 谢谢,原因是我会让用户通过添加,删除值来编辑INI更改,这样用户就可以写下你知道的小写或大写。我知道如何更改大小写字符串,但可能不是 100% 完美,这就是为什么我要求忽略大小写或简单的东西,请查看我的更新
    猜你喜欢
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多