我有一个包含多个组件的表单:datagrid,textArea,文本输入... 对于每个组件,FocusIn Event都可用。
var objTarget:String;
protected function memo_focusInHandler(event:FocusEvent):void
{
objTarget=event.currentTarget.id;
}
使用memo_focusInHandler,我知道哪个有焦点。
我的目标是备份最后一个焦点对象,并重新打开关注此对象的窗口。 我试着这样做:
objTarget.setfocus();
但它不起作用。你能帮忙找到实现目标的最佳途径吗?
最好的问候。
答案 0 :(得分:2)
字符串不是显示对象,因此它不能在focus
中。舞台上字符串的表示形式是TextField。
在as3中,您可以使用舞台方法将焦点设置为所需目标:
stage.focus = myTarget;
请参阅相应的文档部分:https://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Stage.html#focus
答案 1 :(得分:1)
没有必要(您已经显示)使用字符串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
}
答案 2 :(得分:0)
我找到了解决方案:
this[objTarget].selectRange(this[objTarget].text.length, this[objTarget].text.length);
this[objTarget].setFocus();
祝你好运