Прочитать и изменить выбранный элемент со списком с 4 различными значениями
У меня есть многострочное текстовое поле, в которое пользователь может печатать; содержимое которого должно управлять выбранным в данный момент элементом в выпадающем списке.
У меня есть существующий код, который работает для двух элементов в настоящее время (да и нет); тем не менее, теперь мне нужно расширить это на поддержку четырех предметов. Это также обновляется таймером каждые 3 секунды, в случае, если пользователь вручную обновил текст. В поле со списком нельзя ввести, вместо этого он имеет предустановленные варианты.
Также программа предназначена для редактирования файлов свойств.
Я немного не уверен, как это сделать.
Вот что работает для 2 изменений предмета:
Dim lines as Textbox1.lines()
Dim ach_tr As String = "announce-player-achievements=" 'stuff to be replaced by string ach_ttr
Dim ach_ttr As String = "" 'empty string to delete string ach_tr
Dim ach As String = lines(My.Settings.AnnouncePlayerAchievements)'line of string ach_tr
ach = ach.Replace(ach_tr, ach_ttr)'removes string ach_tr and leaves the value
If ach = "true" Then
achievements.SelectedItem = "Yes"
Else
achievements.SelectedItem = "No"
End If
Я пробовал это для 4 предметов:
Dim lines as Textbox1.lines()
Dim diff_tr As String = "difficulty="
Dim diff_ttr As String = ""
Dim diff As String = lines(My.Settings.Difficulty)
diff = diff.Replace(diff_tr, diff_ttr)
If diff = "0" Then
achievements.SelectedItem = "Peaceful"
End If
If diff = "1" Then
achievements.SelectedItem = "Easy"
End If
If diff = "2" Then
achievements.SelectedItem = "Normal"
End If
If diff = "3" Then
achievements.SelectedItem = "Hard"
End If
И этот:
Dim lines as Textbox1.lines()
Dim diff_tr As String = "difficulty="
Dim diff_ttr As String = ""
Dim diff As String = lines(My.Settings.Difficulty)
diff = diff.Replace(diff_tr, diff_ttr)
If diff = "0" Then
achievements.SelectedItem = "Peaceful"
Else
If diff = "1" Then
achievements.SelectedItem = "Easy"
Else
If diff = "2" Then
achievements.SelectedItem = "Normal"
Else
If diff = "3" Then
achievements.SelectedItem = "Hard"
End If
End If
End If
End If
2 ответа
Изменить: Для дальнейшего использования вот более компактная версия, которая также работает:
Public LineNum As Globals.LineNumEnum
Dim serveriptr As String = ("server-ip=")
Dim sipc As String = PropView.OutputRTF.Lines(LineNum.SerIP)
sipc = sipc.Replace(serveriptr, Nothing)
Я нашел свою проблему. Я пытался изменить неправильный комбобокс LOL. ну по крайней мере я узнал о словарях и избранном случае. Хорошо, спасибо за ваше время. Это правильный код LOL:
Dim diff_tr As String = "difficulty="
Dim diff_ttr As String = ""
Dim diff As String = lines(My.Settings.Difficulty)
diff = diff.Replace(diff_tr, diff_ttr)
If diff = "0" Then
difficulty.SelectedItem = "Easy"
ElseIf diff = "1" Then
difficulty.SelectedItem = "Easy"
ElseIf diff = "2" Then
difficulty.SelectedItem = "Normal"
ElseIf diff = "3" Then
difficulty.SelectedItem = "Hard"
End If
Вы могли бы сделать что-то похожее на:
var difficultyMap = new Dictionary<string,string>
{
{"0", "Peaceful"},
{"1", "Easy"},
{"2", "Normal"},
{"3", "Hard"}
};
difficultyCombo.Items = difficultyMap.Values;
updateTimer.Tick += (s,e) => {
var text = inputTextBox.Text;
string found;
if (!difficultyMap.TryGetValue(text))
{
MessageBox.Show("unknown difficulty");
return;
}
difficultyCombo.SelectedItem = found;
};
Это на C#, поскольку я не очень хорошо знаю VB, но основные концепции должны отображаться, я также не уверен в вашей точной реализации или требованиях, по сути, я сделал следующее:
- Создан словарь, который переходит от "числового" типа сложности к типу отображения для комбо
- Заполняет комбо, используя отображаемые значения из словаря
- Всякий раз, когда срабатывает таймер обновления, я:
- Получить текст из текстового поля
- Попробуйте найти соответствующую трудность в словаре
- Покажите ошибку или обновите комбо
Добавление n
Количество элементов для комбо и ввода текста теперь тривиально, так как вы просто добавляете новую запись в словарь.