0

默认情况下,flash 滑块组件可以使用键盘进行操作。有没有办法禁用此行为,以便用户只能用鼠标拖动滑块组件?

4

3 回答 3

2

很简单,只需将“Slider”对象的“focusEnabled”公共属性设置为 false:

import fl.controls.Slider;

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

slider.focusEnabled = false; 

这将表明“滑块”对象在用户单击它后无法接收焦点,因此不允许键盘与之交互。

于 2011-04-06T22:31:56.940 回答
1

正如@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.,因为它处理键盘更新。

高温高压

于 2011-04-06T23:01:13.883 回答
0

添加:

 stage.focus = stage;

到 SliderEvent.CHANGE 处理程序

这会将焦点转移到舞台上,因此禁用滑块上的键盘活动。

于 2011-04-06T21:52:03.430 回答