如何为给定的文本字符串创建正确的KeyboardEvent对象?

时间:2013-01-04 15:39:11

标签: flex actionscript keyboard-events

我想通过手动调度KeyboardEvent对象来模拟一些键盘输入。创建此类事件涉及传递密钥代码。

唉,我只有一个给定的字符串

const text: String = "Hello";

我可以使用String::charCodeAt轻松获取字符代码,但如何获取密钥代码?对于任何给定的字符(例如:“H”),可能只有一个键码,一个键码加上一些修饰符(在这种情况下:Shift + keycode_of_h)或甚至多个键码。有没有办法获取给定char代码的关键代码(可能通过考虑用户的键盘映射)?

2 个答案:

答案 0 :(得分:1)

这不是太难,但只需要一点点设置。

首先创建一个字典或对象,将UTF-8值映射到键值,如下所示:

var keyCodes:Dictionary = new Dictionary();
keyCodes[49] = Keyboard.NUMBER_1; //1
// add the rest of the mappings... 

然后因为你需要指定SHIFT

var shiftedKeyCodes:Dictionary = new Dictionary();
shiftedKeyCodes[33] = Keyboard.NUMBER_1; //!
// add the rest of the shifted mappings

然后创建一个这样的实用函数:

public function charCodeToKeyboardEvent(charCode:int):KeyboardEvent{
    var event:KeyboardEvent = new KeyboardEvent(KeyboardEvent.KEY_UP);
    event.charCode = charCode;
    if(keyCodes[charCode]){
        event.keyCode = keyCodes[charCode];
    } else if (shiftedKeyCodes[charCode]){
        event.keyCode = shiftedKeyCodes[charCode];
        event.shiftKey = true;
    } else {
        return null;
    }
    return event;
}

然后遍历你的字符串并执行此操作:

for(var i:int = 0; i < myString.length; i++){
    dispatchEvent(charCodeToKeyboardEvent(myString.charCodeAt(i)));
}

编辑:我更新了这个以使用Keyboard类上的常量,以便它可以独立于设备或操作系统工作。

答案 1 :(得分:1)

事实证明,我首先不需要100%正确的KeyboardEvent。相反,我失踪了两件事:

  1. 需要为纯文本(如“Hello”)输入调度flash.events.TextEvent
  2. 需要将事件分派到嵌入式编辑控件,可以使用textDisplay属性进行访问。