我正在尝试以编程方式将焦点转移到新创建的TextField
,但由于某种原因,setSelection
和setFocus
不起作用。例如,请参阅下面的测试代码:
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" creationComplete="_init()">
<mx:Button click="{tf.setSelection(1,2)}" />
<mx:Script>
<![CDATA[
import mx.core.UIComponent;
public var tf:TextField
private function _init():void{
tf = new TextField();
tf.text = "abcdefghijk";
tf.type = TextFieldType.INPUT;
tf.autoSize = TextFieldAutoSize.LEFT;
var ui:UIComponent = new UIComponent();
ui.addChild(tf);
addChild(ui);
tf.setSelection(0,1);
ui.setFocus();
ui.addEventListener(MouseEvent.MOUSE_DOWN, function():void{
tf.setSelection(0,3);
});
}
]]>
</mx:Script>
</mx:Application>
setSelection
执行任何操作的唯一MOUSE_DOWN
是{{1}}上的0,3。我认为这一切都与通过鼠标点击接收焦点的文本字段有关,但我不能为我的生活找出如何手动执行此操作。
答案 0 :(得分:1)
setFocus适用于实现mx.managers.IFocusManagerComponent的组件。 Textfield不是Flex组件,也没有实现此接口,这就是它不起作用的原因。如果我是你,我会使用TextInput而不是看到你需要一个输入控件
答案 1 :(得分:1)
在调查弗洛里安的建议所激发的其他课程时,我遇到了UITextField,它是TextField的子类。虽然它没有实现IFocusManagerComponent接口,但它确实有一个setFocus方法,此时此刻似乎正在运行。
作为一个额外的好处,它可以直接添加到容器中,也就是说,无需先构建UIComponent父级。