Определить в Control.GotFocus, перемещается ли пользователь вперед или назад? - PullRequest
2 голосов
/ 14 февраля 2012

Имея следующую диалоговую форму WinForms, я обрабатываю GotFocus событие MyControl:

enter image description here

MyControl, полученное изDevExpress XtraUserControl, который в свою очередь вытекает из стандарта Microsoft WinForms UserControl.

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

Я делаю это успешно с помощью следующего кода:

protected override void OnGotFocus(EventArgs e)
{
    base.OnGotFocus(e);

    // Forward.
    foreach (Control control in Controls)
    {
        if (control.TabStop)
        {
            control.Select();
            break;
        }
    }
}

То есть, если фокусировка Button 1 и пользователь нажимает клавишу Tab , фокус устанавливается наButton 2.

То, что я не могу решить, - это если пользователь переместится назад.То есть, если Button 4 сфокусирован и пользователь нажимает клавиши Shift + Tab , фокус должен быть установлен на Button 3.

Мои двавопросы:

  • Есть ли способ определить порядок навигации пользователя внутри события GotFocus?
  • Правильно ли я все делаю?Может быть, есть встроенная функция / флаг, который я могу установить на MyControl, чтобы автоматически перенаправлять фокус на дочерние элементы управления?

1 Ответ

2 голосов
/ 14 февраля 2012

Так много возможностей:

  • использовать событие OnLostFocus, чтобы сохранить текущий элемент управления и вычислить, была ли нажата клавиша TAB или SHIFT TAB

  • переопределитьProcessKeyPreview для вычисления действия, которое должно быть выполнено в OnGotFocus ( SO ответ )

  • переопределение ProcessCmdKey, как в этот ответ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...