xuyunhai20160827 Ответов: 1

Как кнопки вверх и вниз клавиатуры управляют порядком фокусировки?


Я столкнулся с проблемой, связанной с кнопкой вверх и кнопкой вниз, чтобы контролировать фокус.
Например, есть окно Form1, которое содержит listbox и button1.
Внутри события button1 нажмите кнопку Form2. выскакивать
1., просто запустите программу, работает Form1, затем на этот раз окно фокусируется на списке
2. Если я нажму кнопку 1, всплывет форма 2, а затем закроется, фокус окна будет направлен на кнопку 1.
3.в этот момент я хочу нажать кнопку клавиатуры вверх или вниз, чтобы при выключении Form2 фокус сразу же был направлен на список. Что же мне делать?
Поскольку я обнаружил, что настройки последовательности клавиш tab, настройки клавиш Tab, похоже, не связаны с кнопками клавиатуры вверх и вниз, хотя все они могут управлять фокусом.
Итак, где я могу установить порядок фокусировки для кнопок вверх и вниз и как программировать?

Что я уже пробовал:

я попытался установить клавишу tab и использовать событие keydown для обработки фокуса.

private void Form1_KeyDown(object sender, KeyEventArgs e)
{
    switch (e.KeyCode)
    {
        case Keys.Up:
            this.listboxPoints.Focus();
            break;
        case Keys.Down:
            this.listboxPoints.Focus();
            break;
        default:
            break;
    }
}

Graeme_Grant

Зачем делать это для перехода от контроля к контролю? Это не интуитивно! Отраслевой стандарт TAB = Next; SHIFT-TAB = previous

Вверх / вниз / страница вверх / страница вниз / Начало / Конец не используется для навигации, списков и строк в элементе управления.

Единственный раз, когда я вижу, что вам нужно реализовать свою собственную навигацию, - это если она находится в пользовательском элементе управления, таком как холст для рисования...

BillWoodruff

Вы показываете Form2 modaly ?

1 Ответов

Рейтинг:
2

BillWoodruff

Предполагая, что это приложение Windows Form:

0. клавиши со стрелками вверх и вниз не перемещают фокус: если вы заставляете их делать это, вы не следуете рекомендациям win UI ... что-то, что не должно быть сделано, если у вас нет неотразимый причина.

1. Событий с помощью клавиш со стрелками вниз курок формы вниз EventHandler в только если свойство Form KeyPreView имеет значение ' true.

2. Если вы хотите действовать на основе клавиш со стрелками, то лучше всего переопределить ' ProcessCmdKey в форме:

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
{
    switch (keyData)
    {
        case Keys.Up:
            if(OnUp != null) if (OnUp()) return true;
            break;
        case Keys.Down:
            break;
        case Keys.Right:
            break;
        case Keys.Left:
            break;
    }

    return base.ProcessCmdKey(ref msg, keyData);
}

public Func<bool> OnUp = () =>
{
    Console.WriteLine("up");
    return true;
};
В этом примере клавиша со стрелкой вверх перехватывается, и если определена функция 'OnUp, то функция вызывается; если вызов функции возвращает' true, то ProcessCmdKey не передает ход клавиши никаким другим обработчикам клавиш.

Зачем использовать ProcessCmdKey, когда вы можете использовать форму с KeyPreView, установленным в ' true KeyDown handler для обработки стрелки kwys ? Это вопрос суждения, но имейте в виду, что вы создаете многоразовый компонент, другие разработчики могут устанавливать обработчики ключевых событий.


Karthik_Mahalingam

5

BillWoodruff

спасибо, Шри Картик !