【问题标题】:How to change textfields on stage from an external class in as3如何从 as3 中的外部类更改舞台上的文本字段
【发布时间】:2011-04-29 12:22:35
【问题描述】:

我尝试从外部类更改舞台上的文本字段,但它不起作用。 这就是我尝试的代码:

package  
{
    import flash.display.*;
    import flash.text.TextField;

    public class Exp extends Sprite
    {
        public function Exp() 
        {
            trace(stage.getChildByName("abc"));
            TextField(stage.getChildByName("abc")).text = "abc";

        }

    }

}

在我的舞台上,我得到了一个带有实例名的动态文本字段:“abc”。 但是每次我启动程序时,flash 都会告诉我 stage.getChildByName("abc") 将是一个空对象。

我希望有人可以帮助我。

【问题讨论】:

    标签: flash actionscript-3 textfield stage


    【解决方案1】:

    我以前从未使用过 getChildyName。你可以使用这个:

    var rt:MovieClip = MovieClip(root);
    trace(rt["abc"]);
    

    或更短:

    trace(MovieClip(root)["abc"]);
    

    如果您的示例是您的文档类 -

    package
    {
        import flash.display.MovieClip;
        import flash.text.TextField;
    
        public class Exp extends MovieClip
        {
    
            public function Exp()
            {
                var r:MovieClip = MovieClip(root);
    
                TextField(r["abc"]).text = "abc";
            }
        }   
    }
    

    【讨论】:

    • 如果他没有进入舞台的权限,那么init()函数会抛出一个空指针异常。
    • 不正确,如您所见 - addChild(exp) 在调用 init() 之前被调用。这个答案假设这不是文档类。嗯。
    • 但这是舞台的主班。所以它应该可以访问舞台,不是吗?
    • @Marty 我的意思是问题不在于没有将 Exp 添加到阶段,否则它会引发空指针异常。 @Big_Foot 如果您循环遍历舞台上的孩子们,他们中的任何一个都是 TextFields 吗?看我的回答:评论编辑很烂
    • 是的,这是我的文档类。是的,它有效。非常感谢:))
    【解决方案2】:

    我知道这个问题的答案已经被接受,但我认为这是一个更好的答案:

    package 
    {
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.text.TextField;
    
        public class Main extends Sprite 
        {
            private var _textField:TextField;
    
            public function Main():void 
            {
                if (stage) init();
                else addEventListener(Event.ADDED_TO_STAGE, init);
    
            }// end function
    
            private function init(e:Event = null):void 
            {
                removeEventListener(Event.ADDED_TO_STAGE, init);
    
                var textField:TextField = new TextField();
                textField.name = "abc";
                stage.addChild(textField);
    
                _textField = TextField(stage.getChildByName("abc"));
    
                trace(_textField.name); // output: abc
    
            }// end function
    
        }// end class
    
    }// end package
    

    【讨论】:

      猜你喜欢
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 2011-05-27
      相关资源
      最近更新 更多