Как программно установить фокус на HorizontalList, чтобы он мог получать ключевые события (Flex)? - PullRequest
1 голос
/ 26 октября 2009

Пожалуйста, посмотрите на код:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:creationComplete>
    <![CDATA[
        list.setFocus();
    ]]>
</mx:creationComplete>
<mx:HorizontalList id="list">
    <mx:creationComplete>
        <![CDATA[
            setFocus();
        ]]>
    </mx:creationComplete>
    <mx:focusIn>
        <![CDATA[
            trace("Received focus");
        ]]>
    </mx:focusIn>
    <mx:keyDown>
        <![CDATA[
            trace("Key down");
        ]]>
    </mx:keyDown>
    <mx:dataProvider>
        <mx:Object label="Some"/>
        <mx:Object label="Different"/>
        <mx:Object label="Stuff"/>
    </mx:dataProvider>
</mx:HorizontalList>

Как видите, я пытаюсь сфокусировать HorizontalList при загрузке приложения. И я на самом деле получаю сообщение Received focus в консоли. Но я ожидал, что смогу перемещаться по элементам списка с помощью клавиш со стрелками после установки фокуса. Но это не так. Они работают только после нажатия компонента мышкой. Итак, что я делаю не так? Как сделать так, чтобы список имел фокус и реагировал на клавиши со стрелками?

Ответы [ 2 ]

4 голосов
/ 26 октября 2009

Ваше приложение работает в браузере? Возможно, вам придется установить фокус на объект SWF (через JavaScript), чтобы начать взаимодействие с ним, не щелкая объект в первую очередь.

Например, если вы используете Flex Builder, попробуйте добавить такую ​​строку в конец тега SCRIPT вашего файла index.template.html:

window.onload = function()
{
    document.getElementById("${application}").focus();
};

Возможно, вам придется немного подправить в зависимости от вашей конкретной ситуации, но это, вероятно, проблема. Установка фокуса на объекте Flash явно должна помочь. Надеюсь, это поможет!

2 голосов
/ 26 октября 2009

Я запустил ваш код и смог перемещаться по списку с клавиатуры , не нажимая сначала на список - но мне пришлось щелкнуть где-нибудь в приложении Flex , чтобы оно получало фокус в первую очередь. Я думаю, что это ограничение вспышки в целом - SWF не получит фокус клавиатуры, если вы не нажмете где-то на него (хотя mouseOver все равно будет срабатывать).

...