Apache flex Flash中单独层中创建的按钮内的TextField实例在Flex中为null

Apache flex Flash中单独层中创建的按钮内的TextField实例在Flex中为null,apache-flex,flash,instance,textfield,swc,Apache Flex,Flash,Instance,Textfield,Swc,我在flash中创建了一个按钮对象。该按钮包含两层。一个是背景图像,上面是文本字段。文本字段是动态的。我使用movieclip中的按钮,并将其导出到SWC中。我正试图在flex中使用它 我正在尝试这样做: var myComponent:MyComponent = new MyComponent(); myComponent.button01.theTextField.text = "Caption"; 在Flex调试器中,buttonmyComponent.button01的获取和实例不为n

我在flash中创建了一个按钮对象。该按钮包含两层。一个是背景图像,上面是文本字段。文本字段是动态的。我使用movieclip中的按钮,并将其导出到SWC中。我正试图在flex中使用它

我正在尝试这样做:

var myComponent:MyComponent = new MyComponent();
myComponent.button01.theTextField.text = "Caption";
在Flex调试器中,buttonmyComponent.button01的获取和实例不为null,但textFieldmyComponent.button01的实例为null。TextField为null,我无法更改文本,但默认文本显示在屏幕上。代码在flex中正确编译。有人知道怎么回事吗


我还将swc导出到按钮控件中。因此,按钮不是Flash的默认SimpleButton,而是由FlashButton生成的派生类,其名称与Flash中定义的符号相同。它包含文本字段memeber,该字段为空

下面是timelineLayer 2包含textfield的按钮,textfield实例名为theTextField:

听起来文本字段的引用路径有问题。如果您正在Flex中调试,请检查变量选项卡,看看是否可以找到myComponent,然后是myComponent.button01,然后是myComponent.button01.theTextField。

听起来您对TextField的引用路径有问题。如果您正在Flex中调试,请检查变量选项卡,看看是否可以找到myComponent,然后是myComponent.button01,然后是myComponent.button01.TextField。

我相信您不能引用button SimpleButton对象的子对象

如果您在Flash中编写一个快速测试,试图修改TextField的.text属性,我想您会得到一个运行时错误,如下所示:

1119:通过静态类型为flash的引用访问可能未定义的属性theTextField。显示:SimpleButton


对不起,我没有关于如何解决您的问题的信息。希望这将是一个很好的起点,可以帮助您找到答案。

我相信您不能引用button SimpleButton对象的子对象

如果您在Flash中编写一个快速测试,试图修改TextField的.text属性,我想您会得到一个运行时错误,如下所示:

1119:通过静态类型为flash的引用访问可能未定义的属性theTextField。显示:SimpleButton


对不起,我没有关于如何解决您的问题的信息。不过,希望这将是一个很好的起点,可以帮助您找到答案。

事实上,没有问题,一切都按它应该的方式进行-

在实例化一个类new MyComponent之后,子对象本身不会实例化,该过程将被更改。只有将组件添加到显示列表后,才会实例化所有子控件。因此,只有在将对象实际添加到显示列表后,才需要访问子控件

在flex控件中,您有一个creationComplete事件,用于此目的


您可以阅读对象创建的详细信息。

事实上,没有问题,一切都正常工作:-

在实例化一个类new MyComponent之后,子对象本身不会实例化,该过程将被更改。只有将组件添加到显示列表后,才会实例化所有子控件。因此,只有在将对象实际添加到显示列表后,才需要访问子控件

在flex控件中,您有一个creationComplete事件,用于此目的


您可以阅读对象创建的详细信息。

问题在于SimpleButton似乎是最后一个类。换句话说,您不能将child添加到它,也不能动态添加任何属性。我用一个按钮flash.display.SimpleButton和一个文本字段做了一个简单的测试。当我把文本字段放在IDE的按钮上时,我无法找到它的句柄。当我把这个按钮制作成电影剪辑时,效果非常好。因此,您必须将按钮实例放在MovieClip/Sprite符号内TextField下面的层上。我最终通过代码添加符号,因为我有两个稍微不同的视觉表示

var button:MovieClip;
if (val1 < 10) {
    button = new LowButton();
    button.addEventListener(MouseEvent.CLICK, onLowClick);
    button.textField1.text = "You";
    button.textField2.text = "Stinker";
} else if (val1 > 10 && val1 < 100) {
    button = new MidButton();
    button.textField.text = "Middie";
... 

你明白了

问题是SimpleButton似乎是最后一个类。换句话说,您不能将child添加到它,也不能动态添加任何属性。我用一个按钮flash.display.SimpleButton和一个文本字段做了一个简单的测试。当我把文本字段放在IDE的按钮上时,我无法找到它的句柄。当我把这个按钮制作成电影剪辑时,效果非常好。因此,您必须将按钮实例放在MovieClip/Sprite符号内TextField下面的层上。我最终通过代码添加符号,因为我有两个稍微不同的视觉表示

var button:MovieClip;
if (val1 < 10) {
    button = new LowButton();
    button.addEventListener(MouseEvent.CLICK, onLowClick);
    button.textField1.text = "You";
    button.textField2.text = "Stinker";
} else if (val1 > 10 && val1 < 100) {
    button = new MidButton();
    button.textField.text = "Middie";
... 
你明白了

创建一个movieclip

M 拍摄3帧,为其指定名称:外-第1帧,单击,结束

将textfield添加到其他层,就像第一篇文章中的时间线一样

将此代码添加到第1帧

stop();
addEventListener(MouseEvent.MOUSE_OVER, on_over, false, 0, true);
addEventListener(MouseEvent.CLICK, on_click, false, 0, true);
addEventListener(MouseEvent.MOUSE_OUT, on_out, false, 0, true);


function on_out(e:MouseEvent):void 
{
    gotoAndStop("out");
}

function on_click(e:MouseEvent):void 
{
    gotoAndStop("click");           
}

function on_over(e:MouseEvent):void 
{
    gotoAndStop("over");
}
现在,在代码中,您可以将此剪辑用作超级按钮创建、添加单击事件侦听器、分配标题文本而不包含空异常等…

创建一个movieclip

制作3帧,为其指定名称:out-frame 1,单击,结束

将textfield添加到其他层,就像第一篇文章中的时间线一样

将此代码添加到第1帧

stop();
addEventListener(MouseEvent.MOUSE_OVER, on_over, false, 0, true);
addEventListener(MouseEvent.CLICK, on_click, false, 0, true);
addEventListener(MouseEvent.MOUSE_OUT, on_out, false, 0, true);


function on_out(e:MouseEvent):void 
{
    gotoAndStop("out");
}

function on_click(e:MouseEvent):void 
{
    gotoAndStop("click");           
}

function on_over(e:MouseEvent):void 
{
    gotoAndStop("over");
}

现在,在代码中,您可以将此剪辑用作超级按钮创建、添加单击事件侦听器、分配标题文本而不包含null异常等等。

我做到了,myComponent.button01不为null,myComponent.button01.theTextField为null。我注意到了这个问题,但我不知道是什么问题。默认的textField值显示出来了,所以它在某个地方。我做到了,myComponent.button01不为null,myComponent.button01.theTextField为null。我注意到了这个问题,但我不知道是什么问题。默认的textField值显示出来了,所以它在某处。我也在按钮控件中导出了swc。因此,按钮不是Flash的默认SimpleButton,而是由FlashButton生成的派生类,其名称与Flash中定义的符号相同。它包含文本字段memeber,但为空。@rhtx:好主意。它可能涉及到使用mx_内部名称空间来解决这个问题。@php html:实际上,我认为派生类的行为仍然与SimpleButton相同@罗布斯托:这似乎不是一个名称空间问题,对我来说根本不是一个专家,但我真的很有兴趣听到关于这一行的进一步想法。我在swc中导出了按钮控件。因此,按钮不是Flash的默认SimpleButton,而是由FlashButton生成的派生类,其名称与Flash中定义的符号相同。它包含文本字段memeber,但为空。@rhtx:好主意。它可能涉及到使用mx_内部名称空间来解决这个问题。@php html:实际上,我认为派生类的行为仍然与SimpleButton相同@罗布斯托:这似乎不是一个名称空间的问题,对我来说根本不是什么专家,但我真的很想听听关于这方面的进一步想法。