Action脚本类中使用的ctrl和space键?

时间:2011-03-24 09:29:28

标签: flex actionscript-3 flex3 flex4

我的动作脚本类中有一个switch语句。我有一个function onKeyDown(event: KeyboardEvent),其中包含一个switch语句。它控制不同的键。 但现在我想处理 TAB 键使用两个键 CTRL SPACE 键执行的相同功能。 我想在我的switch语句中添加一个case更多我先按 CTRL 然后 SPACE 键然后调用一个特定的函数。

任何人都可以告诉我在switch语句中如何使用两个键?

    private function onKeyDown(event: KeyboardEvent) : void{

        if (popUp.displayPopUp){
            switch (event.keyCode){
                case Keyboard.UP:
                case Keyboard.DOWN:
                case Keyboard.END:
                case Keyboard.HOME:
                case Keyboard.PAGE_UP:
                case Keyboard.PAGE_DOWN:
                    inputTxt.selectRange(text.length, text.length)
                    list.dispatchEvent(event)
                    break;
                case Keyboard.ENTER:
                    acceptCompletion();
                    break;
                case Keyboard.TAB:
                    if (requireSelection)
                        acceptCompletion();
                    else
                        popUp.displayPopUp = false
                    break;
                case Keyboard.ESCAPE:
                    popUp.displayPopUp = false
                    break;
                case Keyboard.CONTROL && Keyboard.SPACE:
                    if (requireSelection)
                        acceptCompletion();
                    else
                        popUp.displayPopUp = false
                    break;
            }
        }
    }  

3 个答案:

答案 0 :(得分:2)

这是一个非常常见的问题。

event.keyCode只会为您提供最近按下的键的keyCode。所以你必须存储按键和按键发布。幸运的是,AS3是一个非常好的Array实现,可以轻松完成。

var _keys:Array;

addEventListener(KeyboardEvent.KEY_DOWN, keyDownEvent);
addEventListener(KeyboardEvent.KEY_UP, keyUpEvent);

function keyDownEvent(e:KeyboardEvent)
{
    // turn the key on
    _keys[e.keyCode] = true;

    // perform logic
    keyLogic()
}
function keyUpEvent(e:KeyboardEvent)
{
    // turn the key off
    _keys[e.keyCode] = false;
}
function keyLogic()
{
    // this is where the actual logic is
    if(_keys[Keyboard.SPACE] && _keys[Keyboard.CONTROL])
    {
        if (requireSelection)
            acceptCompletion();
        else
            popUp.displayPopUp = false
    }
}

这允许你有一个整洁的小数组,总是告诉你什么键是关闭的。它还将程序逻辑与输入逻辑分开。双赢。

答案 1 :(得分:0)

在您的情况下,您只需检查KeyboardEvent上的ctrlKey属性即可。但@ DingoEatingFuzz的答案将允许检查组合,如'空格'+'字母'等。

答案 2 :(得分:0)

案例Keyboard.SPACE: if(event.ctrlKey) {

} 打破;

我觉得这个approch很好........