嗯......我真的不明白是什么问题。
这里有一个简单的应用程序:
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
keyDown="application1_keyDownHandler(event)"
creationComplete="application1_creationCompleteHandler(event)"
>
<fx:Script>
<![CDATA[
import flash.utils.getQualifiedClassName;
import mx.core.FlexGlobals;
import mx.events.FlexEvent;
protected function application1_keyDownHandler(event:KeyboardEvent):void
{
trace("Key Down Handler: key = " + event.keyCode);
}
protected function application1_creationCompleteHandler(event:FlexEvent):void
{
FlexGlobals.topLevelApplication.addEventListener(KeyboardEvent.KEY_DOWN, tlaKeyDownHandler);
FlexGlobals.topLevelApplication.systemManager.addEventListener(KeyboardEvent.KEY_DOWN, smKeyDownHandler);
}
protected function tlaKeyDownHandler(event:KeyboardEvent):void
{
trace("Top Level Application Key Down Handler: key = " + event.keyCode);
}
protected function smKeyDownHandler(event:KeyboardEvent):void
{
trace("System Manager Key Down Handler: key = " + event.keyCode);
}
]]>
</fx:Script>
<fx:Declarations>
<!-- Place non-visual elements (e.g., services, value objects) here -->
</fx:Declarations>
<s:Button x="130" y="135" label="Button"/>
<s:ComboBox x="130" y="54"/>
<s:TextInput x="130" y="99"/>
</s:Application>
下面是一个输出:
键按下处理程序:键= 65
顶级应用程序键按下处理程序:键= 65
系统管理员按键处理程序:key = 65
按键处理程序:k EY = 83
顶级应用程序键按下处理程序:键= 83
系统管理器键按下处理程序:键= 83
键按下处理程序:键= 68
顶级应用程序键按下处理器:关键= 68
系统管理器键按下处理程序:键= 68
正如你所看到的,我创建了三个不同的组件在应用程序中使用三种不同的方法来捕捉事件。并且在所有情况下(当其中一个组件具有焦点时)事件被触发并捕获。
也许你没有告诉我们重要的事情。
我猜TextInput停止传播KeyboardEvent事件。 也许你可以扩展它并自己重新发送事件 – 2011-04-07 14:45:52
可能在一个小应用程序中工作,但在一个巨大的应用程序中该怎么做? ..我会自杀,如果我会算,有多少textInputs我应该更换xD ..但无论如何,谢谢你的提示:) – Antenka 2011-04-07 14:53:01
我从来没有想过如何使用捕获...这应该是完美的场合,如果你有更多的信息... – Kodiak 2011-04-07 14:54:13