2013-05-22 2 views
0

У меня есть Listbox со 100-200 значениями по умолчанию и включен режим мультиселек-простой.Установить ListBox selecteditems с помощью ItemText?

Я сохранить выбранные текстовые элементы в списке строки:

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" является "Стили" и "Значение" УАК "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 

Работы, как и ожидалось, но слишком много итераций

ответ

1

Учитывая то, что ваш ListBox содержит только строки, то вы можете просто прочитать строки в коллекции SelectedItems

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

EDIT
Следуя приведенным ниже замечанию, я могу предложить посмотреть пространство имен 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 
+0

Спасибо за ваш ответ, но он терпит неудачу, если любое значение lowerstring и элемент ListBox является Wordcase, например, значение INI: «рок "и значение элемента списка:« Рок », вы знаете, как я могу это сделать в этих мероприятиях? Игнорировать или что-то еще? – ElektroStudios

+0

Ну, в чем причина изменения дела? Если это возможно, я бы не изменил случай при записи INI-файла, в противном случае в пространстве имен глобализации есть метод, который восстанавливает правильный случай строки. Позвольте мне проверить, и я обновлю ответ – Steve

+0

Спасибо, причина в том, почему я разрешу пользователю редактировать изменения INI, добавив, удалив значения, чтобы пользователь мог писать ниже или выше, чем вы знаете. Я знаю, как изменить случай строки, но, возможно, не является 100% идеальным, поэтому я прошу игнорировать или что-то простое, см. мое обновление, пожалуйста – ElektroStudios

Смежные вопросы