1

我在 Flash 中创建了一个按钮对象。该按钮包含 2 层。一个是背景图像,顶部是一个文本字段。文本字段是动态的。我使用影片剪辑中的按钮并将其导出到 SWC 中。我正在尝试在 flex 中使用它。

我正在尝试这样做:

var myComponent:MyComponent = new MyComponent();
myComponent.button01.theTextField.text = "Caption";

我得到了按钮的实例(myComponent.button01在 Flex 调试器中不为空),但 textField 的实例(myComponent.button01.theTextField)为,我无法更改文本(但出现默认文本在屏幕上)。代码在 flex 中正确编译。有谁知道出了什么问题?

我也导出了 in swc 中的按钮控件。所以按钮不是Flash默认的SimpleButton,而是flash生成的派生类(与flash中定义的符号同名)。它包含为空的TextField 成员。

这是按钮时间轴(第 2 层包含文本字段,文本字段实例名为 theTextField): alt text http://img59.imageshack.us/img59/5002/timeliney.jpg

4

5 回答 5

4

实际上,没有问题,一切正常。:-)

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

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

您可以在此处阅读有关对象创建的详细信息。

于 2010-03-29T11:18:59.413 回答
1

我相信您不能引用按钮的子项(SimpleButton 对象)。

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

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

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

于 2010-03-25T17:03:04.230 回答
1

问题是 SimpleButton 似乎是一个最终类。换句话说,您不能向其添加Child,或动态添加任何属性。我用 Button (flash.display.SimpleButton) 和 TextField 做了一个简单的测试。当 TextField 放在 IDE 中的 Button 上时,我无法找到它的句柄。当我将按钮制作成一个效果很好的 MovieClip 时。因此,您必须将 Button 实例放在 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";
... 

你明白了!

于 2010-08-26T06:17:51.550 回答
0

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

于 2010-03-25T16:55:58.293 回答
0

创建一个影片剪辑。

制作 3 个框架,为它们指定名称:“out” - 框架 #1、“click”、“over”。

将文本字段添加到时间轴上的其他图层(在第一篇文章中)

将此代码添加到框架 #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");
}

现在,在代码中,您可以将此剪辑用作超级按钮(创建、添加单击事件侦听器、分配没有空异常的标题文本等...)

于 2010-11-17T21:11:46.113 回答