убрать управление с клавиатуры на компоненте слайдера - PullRequest
0 голосов
/ 07 апреля 2011

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

Ответы [ 3 ]

2 голосов
/ 07 апреля 2011

Просто, просто установите публичное свойство focusEnabled объекта Slider в false:

import fl.controls.Slider;

var slider:Slider = new Slider();
addChild(slider);

slider.focusEnabled = false; 

Это будет означать, что объект «Ползунок» не может получить фокус после того, как пользователь щелкнет по нему, и поэтому не позволяет клавиатуре взаимодействовать с ним.

1 голос
/ 07 апреля 2011

Как упоминали @Taurayi и @Grant, изменение фокуса было бы проще.

Вот более грязный способ сделать то же самое:

slider.addEventListener(FocusEvent.FOCUS_IN, onFocus);
function onFocus(event:FocusEvent):void {
    stage.focus = null;
}

Хотя slider.focusEnabled = false; намного проще.

Вот еще более грязный способ:

import flash.sampler.getMemberNames;

removeKeyboardListeners(slider);

function removeKeyboardListeners(dispatcher:EventDispatcher):void{
    var members:Object=getMemberNames(dispatcher);
    for each (var name:QName in members) {
        if (name.localName=="listeners") {
            var numListeners:int = dispatcher[name].length;
            for(var i:int = 0 ; i < numListeners ; i++){
                try{
                    try{
                        if(dispatcher[name][i]){
                            dispatcher.removeEventListener(KeyboardEvent.KEY_DOWN,dispatcher[name][i]);
                            dispatcher.removeEventListener(KeyboardEvent.KEY_UP,dispatcher[name][i]);
                        }
                    }catch(e:Error){trace(e.message);}
                }catch(e:ReferenceError){}
            }
        }
    }
}

И если вы хотите длинный, но менее грязный способ, просто создайте подкласс fl.controls.Slider и установите его в качестве класса для Slider.символ в вашей библиотеке.В вашем подклассе вы бы добавили:

override protected function keyDownHandler(event:KeyboardEvent):void {}

keyDownHandler наследуется от fl.core.UIComponent, а в Slider.as он обрабатывает обновления клавиатуры.

HTH

0 голосов
/ 07 апреля 2011

Добавить:

 stage.focus = stage;

К обработчику SliderEvent.CHANGE

Это сместит фокус на сцену и, следовательно, отключит действие клавиатуры на слайдере.

...