AS3文本框更改事件未触发

Bry*_*yan 4 events textbox dynamic actionscript-3

我用卡通问题泡泡建立了一个问答游戏.根据问题的长度调整泡沫大小.我想在动态文本框上更改事件以调用更改问题气泡大小的函数.

但是,从代码动态修改文本框值时,永远不会调用change事件.

 question_txt.addEventListener(Event.CHANGE, setTextBubbleSize);

 function setTextBubbleSize(event:Event):void
    {
        trace("QUESTION TEXT CHANGED");
        textBubble_mc.height = 30 + question_txt.text.length * 1.2;
        if (textBubble_mc.height > 170) textBubble_mc.height = 170;
        question_txt.y = textBubble_mc.y - textBubble_mc.height / 6 + 10;
    }
Run Code Online (Sandbox Code Playgroud)

我想使用change事件,因为我的代码中有几个地方可以设置question_txt.如何让文本框触发更改事件?

另外,有没有办法计算question_txt中的行数来更准确地设置textBubble_mc的高度?

Dav*_*vid 7

当您使用as3正确更改文本框时,我认为不会触发CHANGE事件.但您总是可以通过以下方式举办活动:

dispatchEvent(new Event(Event.CHANGE, true));
Run Code Online (Sandbox Code Playgroud)

对于文本框中的行数,可以正确使用TextField的numLines

http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/text/TextField.html#numLines


fen*_*mas 6

是的,正如David评论的那样,TextField只有当用户输入编辑时才调度CHANGE事件 - 实际上,大多数组件通常都是如此.当然,原因是因为如果您手动尝试更改"更改"处理程序中的字段值,则需要进行事件的递归循环,您必须手动检测出自己的出路.

你想要做的是做一个包装函数,如:

function setQuestionText( s:String ):void
    {
        question_txt.text = s;
        setTextBubbleSize();
    }
Run Code Online (Sandbox Code Playgroud)

对于您的其他问题,没有理由根据行数或字符数估计文本字段的高度 - 只需设置text属性,您就可以立即查询文本字段height.它将准确反映该字段的新高度,如果您更改字段的宽度,将立即更新高度等.

或者,如果您需要了解有关文本字段大小的任何详细信息,则可以始终使用TextExtent.