0

所以我有一个方法接受一个字符串,然后假设将按钮上的动态文本框设置为所述字符串。

public function setText(caption:String) {
  this.btext.text = caption;
}

我真的不明白为什么这种方法会产生 1119 错误。
Access of a possibly undefined property btext through a reference with static type Button.as

动态文本框的实例名称是btext,我尝试删除文本框并创建一个新文本框,但这仍然会产生 1119 错误。我还阅读了另一个堆栈问题,this['btext'].text = caption;该问题尝试给了我很多运行时错误。

基本上我做错了什么?
感谢您的任何帮助。

编辑

这是我正在使用的代码,我创建了一个按钮实例,将其添加到舞台并使用此代码将其存储在一个数组中。

创建按钮的代码

this.buttonArray.push(this.addChild(weaponButton));

按钮.as

package  {

    import flash.display.MovieClip;
    import flash.filters.*;

    public class Button extends MovieClip {

        public function Button() {

        }

        public function setPosition(xpos:int, ypos:int) {
            this.x = xpos;
            this.y = ypos;
        }

        public function setScale(xScale:Number, yScale:Number) {
            this.scaleX = xScale;
            this.scaleY = yScale;
        }

        public function addDropShadow():Array {
            var dropShadow:DropShadowFilter = new DropShadowFilter(2,45,0, 1,4,4,1,1,true);
            return [dropShadow];
        }

        public function removeDropShadow():Array {
            return null;
        }

        public function setText(caption:String) {
            this.btext.text = caption;
        }
    }

}
4

2 回答 2

2

正如您所说, btext 是对象的实例名称。这是我假设 btext 是您在库中创建的对象的地方。
在你的课堂上,你做错了两件事。因此,让我们检查您的方法。

public function setText(caption:String) {
  this.btext.text = caption;
}

首先错误的是您使用的是“this”。“this”是对你所在类的当前实例的引用。你说 btext 是所述实例的属性。我假设这不是因为您将 btext 定义为库中的对象。这会给你你得到的属性是未定义的错误。

现在手头的第二个问题是你要问“好的,那我如何在我的课堂上引用 btext”。您需要知道的是,只有添加到显示列表 IE:stage 中的对象才能通过舞台访问对象。
您可以通过 3 种方式做到这一点。
第一种方法是将按钮的引用传递给类并将其存储为类的属性。
第二种方法是将您的课程添加到舞台并在课程中收听 addedToStage 事件。那时您可以访问该对象。

MovieClip(root)["btext"].text


前两种方法不是很好的做法,因为 btext 不是类的一部分,一般的经验法则是封装你的类。
要完成这项工作,您可以做的是让您的类将值分配给类中的属性,然后触发一个事件并让该类的父级监听该事件,然后获取该值并分配。

这里有一些建议阅读

于 2012-04-06T20:54:41.663 回答
0

我认为变量 btext 根本不存在,或者它是从 Movieclip 继承的?

于 2012-04-06T20:46:52.167 回答