由于您在示例中列出了“FocusEvent”,因此我将重点介绍 Flex 解决方案。那不是 Flash AS3 类。
我敢打赌,Flex 正试图自己管理焦点,而这与你设置它的尝试搞砸了。然而,有很多方法可以解决这个问题。
Flex 是否试图对您不利?
首先,您可能希望使用 FocusManager 类或 UIComponent setFocus 方法(这取决于您具体需要做什么,我相信 FocusManager 允许您有多个目标对象,而 setFocus 方法要简单得多)而不是舞台焦点。这具有在 Flex 组件系统中本地工作的好处。
你在听正确的事件吗?
如果做不到这一点,请尝试确保您正在寻找的 FocusEvent 的目标既不是您的文本字段也不是您的文本字段的子项。(只是为了理智)。如果这不起作用,请确保您只分派了一次事件。接下来,我将尝试使用 MouseEvent.CLICK 而不是 FocusEvent。
其他一切都失败了吗?
不幸的是,Flex 通常远非完美。我发现有时我必须使用 setTimeout 来解决它不会以“正确的顺序”触发事件的事实——你调整了某些东西的大小,但是在重新渲染之前调度了“RESIZE”,你改变了字体,并且 TextArea 的 TextWidth 属性不返回正确的数字。解决方法
private function myListener( event:FocusEvent ):null
{
setTimeout( function(){ editfield.setFocus(); }, 35 );
}