如何在Flex文本框中选择所有功能?

时间:2009-09-24 09:09:52

标签: flex actionscript-3 components

我正在尝试在Flex中创建一个简单的“智能”文本框组件,我想在其中使用一个函数,我可以在组件外部使用它来强制自己选择其中的所有文本。

SmartTextbox.mxml内:

public function selectAll():void
{
    this.setSelection(0, this.length);
}

当文本框获得焦点时,我也会使用此功能,如下所示:

private function onTextInput_focusIn(event:Event):void
{
        selectAll();
}

后一个,在focusIn事件中,正在工作。 但是,如果我尝试从外部调用该函数,例如:

texInputQuickSearch是SmartTextBox组件的另一个组件内。

if(searchModule.currentState == SearchModule.STATE_SEARCH)
{
    doSearch();
    searchModule.textInputQuickSearch.selectAll();              
}

不会重新选择文字。

为什么它会像这样工作?

2 个答案:

答案 0 :(得分:1)

你需要做类似的事情......

AS3:

import mx.core.UITextField;

private function initializeHandler( event:Event ):void{

  var ti:TextInput = event.currentTarget as TextInput;
  var tf:UITextField = ti.mx_internal::getTextField();

  tf.alwaysShowSelection = true;

  ti.setFocus();
}


private function setSelection( start:int, end:int ):void{

  txtName.selectionBeginIndex = start;
  txtName.selectionEndIndex = end;

}

MXML:

<mx:TextInput id="txtName"
  initialize="initializeHandler( event );"/>

答案 1 :(得分:0)

我的第一个猜测是你的条件语句在你期望的时候没有评估为TRUE。也许这是你问题中的错字,但你有:

带有小写“s”的searchModule与带有大写“S”的SearchModule相比

如果您没有使用Flex Builder或其他调试环境,我会使用跟踪或类似内容的真实代码块测试它(可以在FLASH IDE中运行):

if(searchModule.currentState == SearchModule.STATE_SEARCH) {
    trace("made it here...I'm in");
    doSearch();
    searchModule.textInputQuickSearch.selectAll();
    trace("you should have seen it select!");
}

验证两个输出都打印。如果是这样,你至少知道doSearch()不会卡住。