AS3 将重点放在特定组件上

AS3 set focus on specific component

我有一个包含多个组件的表单:datagrid、textArea、文本输入... 对于每个组件,FocusIn 事件都可用。

var objTarget:String;
     protected function memo_focusInHandler(event:FocusEvent):void
            {
                objTarget=event.currentTarget.id;       
}

有了memo_focusInHandler,我知道哪个有焦点。

我的目标是备份最后一个焦点对象,然后重新打开 Windows 并将焦点放在这个对象上。 我尝试这样做:

objTarget.setfocus(); 

但是没用。你能帮我找到实现目标的最佳方法吗?

字符串不是显示对象,因此不能在focus中。字符串在舞台上的表示是一个 TextField。

在 as3 中,您可以使用 stage 方法将焦点设置到所需的目标:

stage.focus = myTarget;

请参阅相应的文档部分:https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Stage.html#focus

我找到了解决方案:

this[objTarget].selectRange(this[objTarget].text.length, this[objTarget].text.length);
    
    this[objTarget].setFocus();

不需要(如您所示)使用字符串 ID 引用。直接使用对象引用会更简单(并且效率更高)。

var objTarget:Object; // Object instead of type :String

protected function memo_focusInHandler(event:FocusEvent):void {
    objTarget = event.currentTarget;  //instead of the currentTarget's id property, assign the current target itself       
}

然后,当你想重新设置焦点时,你可以这样做:

if(objTarget is TextInput || objTarget is TextArea){  //make sure it's a text input or text area first - optional but recommended if you don't like errors
    objTarget.selectRange(objTarget.text.length, objTarget.text.length); //set cursor to the end
    objTarget.setFocus(); //focus the text input/area
}