【发布时间】:2025-12-31 04:00:16
【问题描述】:
当用户更改它时,我需要修改输入 TLF 文本字段中的文本。例如,每次用户添加或删除字符时,我都会尝试将其设为大写:
import fl.text.TLFTextField;
import flashx.textLayout.formats.TextLayoutFormat;
import flashx.textLayout.elements.TextFlow;
var myTLFTextField:TLFTextField = new TLFTextField();
addChild(myTLFTextField);
myTLFTextField.x = 10;
myTLFTextField.y = 10;
myTLFTextField.width = 200
myTLFTextField.height = 100;
myTLFTextField.text = "This is my text";
var myFormat:TextLayoutFormat = new TextLayoutFormat();
myFormat.textIndent = 8;
myFormat.color = 0x336633;
myFormat.fontFamily = "Arial, Helvetica, _sans";
myFormat.fontSize = 24;
var myTextFlow:TextFlow = myTLFTextField.textFlow;
myTextFlow.hostFormat = myFormat;
myTextFlow.flowComposer.updateAllControllers();
//--
myTLFTextField.addEventListener(Event.CHANGE, this.onTextFieldChange);
function onTextFieldChange(event:Event):void
{
myTLFTextField.text = myTLFTextField.text.toUpperCase();
}
//-- 之前的代码取自页面上的第一个示例TLFTextField documentation。
当我尝试编辑文本时,它确实变成了大写,但之后文本字段停止响应任何输入并且输出显示
TypeError:错误 #1009:无法访问 null 的属性或方法 对象引用。在 flashx.textLayout.container::TextContainerManager/getController() 在 flashx.textLayout.container::TextContainerManager/mouseDownHandler()
当我注释掉 addEventListener 行时,一切似乎都正常。
这是否意味着不能像经典文本字段那样在用户输入事件中对 TLF 文本字段中的文本进行更改?
【问题讨论】:
-
可能是无限循环。尝试检查是否确实需要在回调中更改案例;
if( myTLFTextField.text.toUpperCase() != myTLFTextField.text ) -
@Dave 我的问题不是关于大写(无论如何都有一个内置功能可以保持文本大写),而是更多关于在用户输入事件中更改文本。如果您尝试以其他方式进行更改,例如在文本末尾添加字母“A”而不是将其设为大写,则会遇到同样的问题。
-
好吧,但我的观点仍然成立;可能是通过更改您触发回调的文本,这会更改文本(...)。我不确定是否是问题所在,但您可以通过打破该循环进行检查。如果事实证明是问题所在,您可以尝试更改您收听的事件或使用变量标记(例如,如果已经在回调中,则设置为
true)。 -
@Dave 那么打破循环的最佳方法是什么?对不起,如果我没有明白你所说的变量标记的意思..
-
@The_asMan 这不是真的。任何拥有 Flash CS6 的人都可以创建一个空的 AS3 文档,将代码复制/粘贴到第一帧中,并在输出面板中得到完全相同的错误。我已经尝试过
FLOW_OPERATION_COMPLETE,问题仍然存在。
标签: actionscript-3 flash apache-flex text actionscript