c # Список управления (стрелки и клавиши ввода) - PullRequest
0 голосов
/ 06 января 2012

У меня есть список, который отображает содержимое массива.Массив заполняется списком результатов при нажатии моей кнопки «Перейти».

Кнопка «Перейти» устанавливается как AcceptButton в свойствах формы, поэтому нажатие клавиши «Ввод» в любом месте фокуса формы вызываетзапускает процесс нажатия кнопки.

Двойной щелчок по результату из массива в списке работает нормально, используя ниже:

void ListBox1_DoubleClick(object sender, EventArgs e) {}

Я хотел бы иметь возможностьиспользуйте мои клавиши со стрелками и клавиши ввода, чтобы выбрать и запустить событие без необходимости дважды щелкнуть строку в списке.(однако кнопка go запускается каждый раз вместо этого)

В основном, откройте форму, введите строку поиска, нажмите enter, чтобы запустить кнопку go, используйте стрелки вверх и вниз, затем нажмите enter при выборе, чтобы запустить то же событие, что и двойной щелчок выше.Нужно будет менять фокус после каждого бита.

Ответы [ 2 ]

7 голосов
/ 06 января 2012

Вы можете обрабатывать события KeyDown для элементов управления, которые хотите переопределить.Например,

private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Enter)
    {
        //execute go button method
        GoButtonMethod();
        //or if it's an event handler (should be a method)
        GoButton_Click(null,null);
    }

}

, который будет выполнять поиск.Затем вы можете сфокусировать свой список

myListBox.Focus();
//you might need to select one value to allow arrow keys
myListBox.SelectedIndex = 0;

Вы можете обработать кнопку Enter в ListBox так же, как TextBox выше, и вызвать событие DoubleClick.

2 голосов
/ 20 марта 2014

Эта проблема похожа на - Нажатие клавиши Enter добавит выбранный элемент из ListBox в RichTextBox

Некоторые элементы управления не распознают некоторые клавиши при их нажатии в Элемент управления:: KeyDown событие.Например, список не распознает, является ли нажатая клавиша Enter клавишей.

См. Раздел примечаний к справке о событиях Control :: KeyDown .

Одним из способов решения вашей проблемы может быть написание метода для события Control :: PreviewKeyDown для элемента управления списка:

private void listBox1_KeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyCode == Keys.Up && this.listBox1.SelectedIndex - 1 > -1)
    {
        //listBox1.SelectedIndex--;
    }
    if (e.KeyCode == Keys.Down && this.listBox1.SelectedIndex + 1 < this.listBox1.Items.Count)
    {
        //listBox1.SelectedIndex++;
    }
    if (e.KeyCode == Keys.Enter)
    {
        //Do your task here :)
    }
}

private void listBox1_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Enter:
            e.IsInputKey = true;
            break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...