在 Actionscript 3 中,我看到如果我按下“8”键(从小键盘),我得到小键盘键“8”的 keyCode 结果,但是当我禁用“Num Lock”并按下小键盘键时“8”,我收到向上箭头键的 keyCode 的事件...
如何区分小键盘上的键(禁用 Num Lock)和原来的键,如 Arrows、End、Insert、Delete 等?
我已经尝试使用事件的 keyLocation
属性,该属性的值对于箭头是 0,对于数字键盘是 3,但是当 Num Lock 被禁用时,该属性的值是 4 , 6, 2 and 8 in the numpad is 0, 所以我无法区分禁用数字键盘和箭头键的数字。
Keyboard
类的 numLock
属性也不起作用,因为我不知道我是按了向上箭头键还是禁用了 8 键 Num Lock (因为它们触发了相同的事件,或者我认为)
最佳答案
我一直无法找到一种方法来完成您的要求。我怀疑实际的关键代码本身被操作系统层驱动程序吸收,并且永远不会到达 FLEX 以供读取。这是通过在我的 iMac(没有 MS Natural 驱动程序)上使用我的 Microsoft Natural 键盘进行测试而得到的。没有驱动程序,键盘无法打开 numlock,并且键码保持不变。
我不知道这是否有帮助,但我确实编写了一个小测试程序来确定在每个平台上 flex 可以看到哪些键代码、位置和字符代码。
这是测试应用的代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" applicationComplete="onApplicationComplete()" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
public function onApplicationComplete():void
{
stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);
}
public function onKeyDown(keyboardEvent:KeyboardEvent):void
{
charCodeLabel.text = keyboardEvent.charCode.toString();
keyCodeLabel.text = keyboardEvent.keyCode.toString();
switch(keyboardEvent.keyLocation)
{
case KeyLocation.LEFT:
keyLocationBox.text = "Left";
break;
case KeyLocation.NUM_PAD:
keyLocationBox.text ="Num Pad";
break;
case KeyLocation.RIGHT:
keyLocationBox.text = "Right";
break;
default:
keyLocationBox.text = "Standard";
}
}
]]>
</mx:Script>
<mx:Label x="46" y="34" text="Just click anywhere inside the flash movie and start typing."/>
<mx:Label x="46" y="72" text="You typed Char Code:"/>
<mx:Label x="232" y="72" text="Key Code:"/>
<mx:Label x="183" y="72" id="charCodeLabel"/>
<mx:Label x="303" y="72" id="keyCodeLabel"/>
<mx:Label x="46" y="98" text="Key Location:"/>
<mx:Label x="134" y="98" width="68" id="keyLocationBox"/>
</mx:Application>
如果需要,您也可以简单地使用我在此处上传的实时版本:Flex Online Key Code Tool
关于apache-flex - 是否有可能确切地知道在 AS3 中按下了什么小键盘键(禁用 Num Lock)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1410894/