gpt4 book ai didi

actionscript-3 - 当窗口没有焦点时如何从控件中移除焦点?(否则当窗口再次获得焦点时它会恢复)

转载 作者:行者123 更新时间:2023-12-02 22:05:12 24 4
gpt4 key购买 nike

我需要从 TextInput 中移除焦点,而 Adobe Air 窗口没有焦点。但是我找不到正常的方法来做到这一点。

这是一个示例应用程序:

<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"

>
<fx:Script>
<![CDATA[
protected function onFocusIn(event:FocusEvent):void{
input.appendText('I');
}

protected function onFocusOut(event:FocusEvent):void{
input.appendText('o');
// input.focusManager.deactivate();
// stage.focus = null;
// focusManager.setFocus(input2);
// stage.focus = stage;
}

]]>
</fx:Script>
<s:VGroup>
<s:TextInput id="input" focusIn="onFocusIn(event)" focusOut="onFocusOut(event)" />
<s:TextInput id="input2" />
</s:VGroup>

  1. stage.focus = null 不起作用 - 当窗口没有焦点时,stage.focus 已经是 null,所以它不起作用。

  2. input.focusManager.deativate() 可以解决这个问题,但似乎这个管理器用于其他控件,所以这不是一个好的选择。文档中说

    The SystemManager activates and deactivates a FocusManager if more than one IFocusManagerContainer is visible at the same time.

    但在此示例应用程序中,我有两个 TextInputs,当我为第一个停用 focusManager 时,第二个不再将焦点恢复到 alt-tab。

  3. 我可以将焦点设置到其他东西上,但创建特殊的“虚拟”输入是某种猴子补丁,我宁愿避免使用它,直到它不可避免。

  4. stage.focus 设置为 TextInput 的某个父级也没有任何效果。

    那么,您知道在窗口没有焦点时从组件中移除焦点的更好方法吗?

最佳答案

好的,我找到了令我满意的解决方案:

FocusManager(focusManager).mx_internal::lastFocus = null;

它并不完美,因为它使用 mx_internal 命名空间属性,可以在未来的 sdk 版本中更改。

此解决方案之所以有效,是因为 FocusManager 在 Windows 激活时恢复了焦点(带有注释行的漂亮代码...):

    private function activateWindowHandler(event:Event):void
{
// var target:InteractiveObject = InteractiveObject(event.target);
// trace("FM " + this + " activateWindowHandler ", _lastFocus);

windowActivated = true;

if (activated)
{
dispatchEvent(new FlexEvent(FlexEvent.FLEX_WINDOW_ACTIVATE));
// restore focus if this focus manager had last focus
if (_lastFocus && !browserMode)
_lastFocus.setFocus();
lastAction = "ACTIVATE";
}
}

不幸的是,它不是 focusIn 处理程序堆栈跟踪的一部分,因此需要时间才能找到谁正在恢复对 Windows 激活的关注。

关于actionscript-3 - 当窗口没有焦点时如何从控件中移除焦点?(否则当窗口再次获得焦点时它会恢复),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16236396/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com