如何在 Flex 文本框中创建一个全选功能?
Posted
技术标签:
【中文标题】如何在 Flex 文本框中创建一个全选功能?【英文标题】:How can I make a function to select all in a Flex textbox? 【发布时间】:2010-12-01 00:43:28 【问题描述】:我正在尝试在 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();
它不会重新选择文本。
为什么会这样?
【问题讨论】:
使用调试器,或者通过放置日志,您是否看到 selectAll() 是否在 texInputQuickSearch 上下文中执行? doSearch() 中是否抛出异常? 您是否有机会将可选属性设置为 false? 使用调试器我可以看到 selectAll 已执行,但在执行后直接 selectionBeginIndex 和 selectionEndIndex 仍然与之前相同 = 没有选择。当我在 focusIn 事件上执行 selectAll 时,它会起作用 【参考方案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 );"/>
【讨论】:
成功了! :) 谢谢,介意解释它为什么起作用吗?我不熟悉 mx_internal 和 UITextField 组件。【参考方案2】:我的第一个猜测是,您的条件语句没有在您期望的时候评估为 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() 没有卡住。
【讨论】:
我使用 SearchModule.STATE_SEARCH 因为它是一个静态的状态名称。以上是关于如何在 Flex 文本框中创建一个全选功能?的主要内容,如果未能解决你的问题,请参考以下文章