如何在TextField上设置焦点和选择?

时间:2011-01-16 22:56:19

标签: flex

我正在尝试以编程方式将焦点转移到新创建的TextField,但由于某种原因,setSelectionsetFocus不起作用。例如,请参阅下面的测试代码:

<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。我认为这一切都与通过鼠标点击接收焦点的文本字段有关,但我不能为我的生活找出如何手动执行此操作。

2 个答案:

答案 0 :(得分:1)

setFocus适用于实现mx.managers.IFocusManagerComponent的组件。 Textfield不是Flex组件,也没有实现此接口,这就是它不起作用的原因。如果我是你,我会使用TextInput而不是看到你需要一个输入控件

答案 1 :(得分:1)

在调查弗洛里安的建议所激发的其他课程时,我遇到了UITextField,它是TextField的子类。虽然它没有实现IFocusManagerComponent接口,但它确实有一个setFocus方法,此时此刻似乎正在运行。

作为一个额外的好处,它可以直接添加到容器中,也就是说,无需先构建UIComponent父级。