Обработка клавиатуры ++ - PullRequest
1 голос
/ 26 февраля 2011

Мое приложение имеет сетку данных, а также многие другие компоненты UIC (кнопки, меню и т. Д.). У меня есть обработчик KeyDown общего этапа, а также специальный для сетки данных. Поведение, которое я пытаюсь реализовать, оказывается более хитрым, чем я думал: в основном, при использовании стрелок на клавиатуре я хотел бы, чтобы решетка данных всегда слышала о таких командах, даже если она не в фокусе.

Возможные подходы, о которых я подумал:

  • иметь DG всегда в фокусе: кажется глупым / хитрым - в основном нужно помнить, что нужно возвращать DG обратно после любого взаимодействия с остальным пользовательским интерфейсом, который, очевидно, не масштабируется 1007 *

  • попытаться установить DG в фокусе из обработчика этапа KeyDown: похоже, время не работает, поскольку DG слишком поздно фокусируется, чтобы «услышать» событие.

  • из обработчика нажатия кнопки stage, проверьте, не находится ли DG в фокусе, и, если да, передайте ему событие. Кажется, в теории это имеет смысл, но я не уверен, как это сделать правильно, поскольку мой обработчик этапа keyDown использует перехват, и, таким образом, кажется, что он перехватывает одно и то же событие снова и снова.

Мне интересно, есть ли что-то намного более простое, что я просто упускаю из-за неопытности. Хотелось бы услышать ваши мысли.

спасибо!

F

1 Ответ

0 голосов
/ 26 февраля 2011

Я бы пошел с третьим вариантом, передавая событие keydown stage в DataGrid ... Но только если действие события по умолчанию не было предотвращено. Затем просто event.preventDefault() в обработчике DataGrid, и все будет хорошо.

Например:

stage.addEventListener(..., function(event:KeyboardEvent):void {
    if (event.isDefaultPrevented())
        return;
    dataGrid.dispatchEvent(event);
});

dataGrid.addEventListener(..., function(event:KeyboardEvent):void {
    event.preventDefault();
    ... handle event ...
});
...