C # KeyUp & KeyDown текстовое поле событие для управления выбранным элементом списка - PullRequest
0 голосов
/ 07 июля 2019

У меня есть текстовое поле в моей форме, которое я использую в качестве строки поиска для моего списка.В настоящее время у меня есть текстовое поле, настроенное для активного выбора элемента в списке при вводе следующего кода:

    private void TextBox1_TextChanged(object sender, EventArgs e) 
    {
        var textBox = (TextBox)sender;
        listBox1.SelectedIndex = textBox.TextLength == 0 ?
            -1 : listBox1.FindString(textBox.Text);
    }

Что я хотел бы сделать, так это уметь использовать стрелку вверх и внизклавиши для настройки того, что выбрано.Например, если список содержит два элемента: Test1 и Test2, когда вы начнете вводить «t», будет выбран test1.В отличие от необходимости заканчивать вводить «test2», чтобы изменить то, что выбрано, я хотел бы иметь возможность набрать «t», а затем нажать клавишу со стрелкой вниз, чтобы выбрать test2, но сохранить фокус в текстовом поле.

У меня естьпопытался использовать следующее, однако при нажатии клавиши со стрелкой вверх или вниз курсор в текстовом поле настраивается вместо selectedIndex

  private void TextBox1_KeyUp(object sender, KeyEventArgs e)
    {
        int index = listBox1.SelectedIndex;
        index = index--;
        listBox1.SelectedIndex = index;
    }
    private void TextBox1_KeyDown(object sender, KeyEventArgs e)
    {
        int index = listBox1.SelectedIndex;
        index = index++;
        listBox1.SelectedIndex = index;
    }

Ответы [ 2 ]

1 голос
/ 07 июля 2019

Вас смутило название события.
KeyUp и KeyDown означают нажатие кнопки клавиатуры вверх и вниз, а не нажатие стрелок вверх и вниз. Чтобы сделать то, что вы ищете, вам понадобится любой из них, например: KeyUp, например:

private void TextBox1_KeyUp(object sender, KeyEventArgs e)
{
    int index = listBox1.SelectedIndex;
    if(e.KeyCode == Keys.Up)
    {
         index--;
    }
    else if(e.KeyCode == Keys.Down)
    {
         index++;
    }
    listBox1.SelectedIndex = index;
}
0 голосов
/ 08 июля 2019

@ Сохаиб Джунди СПАСИБО !!!Это прояснило невероятное!В итоге я немного подкорректировал код, чтобы исправить возникающую ошибку, а также небольшую ошибку, которая была у курсора в случае, если кто-то столкнется с чем-то похожим на это.

   private void TextBox1_KeyUp(object sender, KeyEventArgs e)
    {
        int index = listBox1.SelectedIndex;
        int indexErrorFix = listBox1.Items.Count;
        if (e.KeyCode == Keys.Up)
        {
            index--;

        }
        else if (e.KeyCode == Keys.Down)
        {
            index++;

        }
        if (index < indexErrorFix && index >= 0)
        {
            listBox1.SelectedIndex = index;
        }
        else { }

        textBox1.SelectionStart = textBox1.Text.Length;
    }
...