S o我有一个接受String的方法,然后假设将按钮上的动态文本框设置为String。
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));
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;
}
}
}
答案 0 :(得分:2)
如前所述,btext是对象的实例名称。这里我假设btext是您在库中创建的对象
在你的班上,你做错了两件事。所以让我们检查你的方法。
public function setText(caption:String) {
this.btext.text = caption;
}
首先,错误的是你正在使用“这个”。 “this”是对您所在类的当前实例的引用。并且您说btext是所述实例上的属性。我假设它不是因为您将btext定义为库中的对象。这将使您获得属性未定义的错误
现在第二个问题就是你要问“好我如何在课堂上引用btext”。您需要知道的是,只有添加到显示列表IE:stage的对象才能通过舞台访问对象
你可以这3种方式做到这一点
第一种方法是将对按钮的引用传递给类,并将其存储为类的属性
第二种方法是将您的类添加到舞台,并在类中侦听addedToStage事件。那时你可以访问该对象。
MovieClip(root)["btext"].text
前两种方法不是很好的做法,因为btext不是类的一部分,一般的经验法则是封装你的类。
要使这项工作成功,您可以让您的类将值分配给类中的属性,然后触发事件并使该类的父级侦听该事件,然后只需获取值并分配。
Here is some suggested reading
答案 1 :(得分:0)
我认为变量btext根本不存在,还是继承自Movieclip?