代码之家  ›  专栏  ›  技术社区  ›  Bryan

AS3文本框更改事件未触发

  •  3
  • Bryan  · 技术社区  · 15 年前

    但是,当从代码中动态修改我的文本框值时,永远不会调用更改事件。

     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;
        }
    

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

    还有,有没有办法计算有问题的行数以更准确地设置textbuble\u mc的高度?

    3 回复  |  直到 13 年前
        1
  •  7
  •   David    15 年前

    我认为当你用as3正确更改文本框时,不会触发更改事件。但是,您可以通过以下方式发起活动:

    dispatchEvent(new Event(Event.CHANGE, true));
    

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

        2
  •  6
  •   fenomas    15 年前

    是的,正如大卫所说, TextField

    function setQuestionText( s:String ):void
        {
            question_txt.text = s;
            setTextBubbleSize();
        }
    

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

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

        3
  •  1
  •   deadrunk NebojÅ¡a Stojković    13 年前

    示例代码:

    package {
    import flash.events.Event;
    import flash.text.TextField;
    
    public class MyTf extends TextField {
        public function MyTf() {
            super();
        }
    
        override public function set text(value:String):void
        {
            super.text = value;
            dispatchEvent(new Event(Event.CHANGE));
        }
    
    }
    }