Мне было интересно, как было бы лучше реализовать систему для просмотра списка строк с помощью клавиш со стрелками? Пока у меня есть заполненный список с несколькими тестовыми строками, добавленными в него как foo, goo, hoo, и теперь я хотел бы иметь текстовое поле, где я могу просматривать их, используя клавиши со стрелками вверх и вниз.

Вот немного кода, который у меня есть:

List<String> reload;

private void inputBox_KeyDown(object sender, KeyEventArgs e){
        int x = 0;
        reload.item(x);//this is my bogus guess on how it should be done
            try{
                if (e.KeyCode == Keys.Enter){
                    itemHandler();
                    inputBox.Clear();
                }

                if (e.KeyCode == Keys.Up){
                    inputBox.Text = reload().item(x+1); //again bogus
                    x++;
                }

                if (e.KeyCode == Keys.Down)(
                    inputBox.Text = reload().item(x-1); //again bogus
                    x--;
                }

                else {}
            }

            catch(Exception ex)
            {
                rtbDisplay.AppendText("Error:" + ex );
            }
        }
-1
Joe Carr 24 Апр 2017 в 09:44

2 ответа

Лучший ответ

x должен быть определен вне метода, потому что вы не хотите, чтобы он повторно инициализировался в 0 при каждом вызове метода.

Если вы не знакомы со списками, я предлагаю вам прочитать MSDN первый.

В принципе, вы почти получили это:

int x = 0;
private void inputBox_KeyDown(object sender, KeyEventArgs e){
    try{
        if (e.KeyCode == Keys.Enter){
            itemHandler();
            inputBox.Clear();
        }

        if (e.KeyCode == Keys.Up){
            inputBox.Text = reload[x + 1];
            x++;
        }

        if (e.KeyCode == Keys.Down)(
            inputBox.Text = reload[x - 1];
            x--;
        }

        else {}
    }

        catch(Exception ex)
        {
            rtbDisplay.Text = "Error:" + ex.ToString();
        }
    }
1
Graham 29 Сен 2017 в 14:42

Сначала вам понадобится переменная индексации, объявленная вне метода, иначе она будет начинаться с 0 каждый раз. Во-вторых, список может быть проиндексирован с помощью оператора [ ]

int index = 0;

private void inputBox_KeyDown(object sender, KeyEventArgs e)
{


    if (e.KeyCode == Keys.Enter){
        itemHandler();
        inputBox.Clear();
    }

    // you should check here whether your index is between 0 and reload.Count-1
    if (reload.Count > 0 && index > 1 && index < reload.Count -1){

        if (e.KeyCode == Keys.Up){
            x++;
        }

        if (e.KeyCode == Keys.Down)(
            x--;
        }

        inputBox.Text = reload[index]; 

    }    
}
1
Mong Zhu 24 Апр 2017 в 06:55
43581438