Убрать управление с клавиатуры на компоненте слайдера
По умолчанию компонентом слайдера вспышки можно манипулировать с клавиатуры. Есть ли способ отключить это поведение, чтобы пользователи могли перетаскивать компонент слайдера только с помощью мыши?
3 ответа
Просто, просто установите публичное свойство focusEnabled объекта Slider в false:
import fl.controls.Slider;
var slider:Slider = new Slider();
addChild(slider);
slider.focusEnabled = false;
Это будет означать, что объект "Ползунок" не может получить фокус после того, как пользователь щелкнет по нему, и, следовательно, не позволит клавиатуре взаимодействовать с ним.
Как упоминали @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 обрабатывает обновления клавиатуры.
НТН
Добавлять:
stage.focus = stage;
К обработчику SliderEvent.CHANGE
Это сместит фокус на сцену и, следовательно, отключит клавиатуру на слайдере.