Прочитать и изменить выбранный элемент со списком с 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, но основные концепции должны отображаться, я также не уверен в вашей точной реализации или требованиях, по сути, я сделал следующее:

  1. Создан словарь, который переходит от "числового" типа сложности к типу отображения для комбо
  2. Заполняет комбо, используя отображаемые значения из словаря
  3. Всякий раз, когда срабатывает таймер обновления, я:
    1. Получить текст из текстового поля
    2. Попробуйте найти соответствующую трудность в словаре
    3. Покажите ошибку или обновите комбо

Добавление n Количество элементов для комбо и ввода текста теперь тривиально, так как вы просто добавляете новую запись в словарь.

Другие вопросы по тегам