Flash AS3 ComboBox样式未使用

时间:2012-01-18 11:28:07

标签: flash actionscript-3 combobox styles

我在第一帧的舞台上有一个ComboBox(称之为cb)。我想将它的样式设置为右对齐的文本字段。在开始时,一些其他组件的事件首先禁用,并在一段时间后重新启用ComboBox。

我使用以下代码设置样式(在第一帧上):

var menuTextFormat:TextFormat = new TextFormat();
menuTextFormat.align = "right";
cb.textField.setStyle("textFormat", menuTextFormat);
cb.setStyle("textFormat", menuTextFormat);
cb.setStyle("disabledTextFormat", menuTextFormat);
video.addEventListener(VideoEvent.ON_CHANGE, function (event) {cb.enabled = okButton.enabled = false;})
video.addEventListener(VideoEvent.ON_READY, function (event) {cb.enabled = okButton.enabled = true; })

视频是一个简单的组件,可在摄像机初始化时调度ON_CHANGE事件,在安装摄像机时调度ON_READY。在那段代码之后,我给cb一个新的DataProvider并将一个摄像机连接到调度事件的视频组件。

当闪光灯开始时,样式未激活,文本左对齐。当第一个事件发生时,ComboBox进入禁用状态。仍然左对齐。之后,第二个事件启用它并应用了样式,它是右对齐的。

我希望它从第一次开右对齐。我尝试从AS禁用/启用组件,但没有工作,似乎需要一点时间来应用样式。

我还检查了样式设置,我已经写了一个计时器并跟踪对齐,但它说得对,所以样式就是没用过。

我尝试使用来自AS的addChild手动添加组件,但仍然没有成功。

我如何强制它使用该风格?

感谢您的任何想法!

环境:

CS5.5
AS3
Flash version: 11.1.102.55
OS: Win XP

更新的 我想出了如何制作一个简单的概念:

在舞台上,我删除了一个ComboBox(实例名称cb)和一个名为foobar的库中的符号(实例名称视频)。在第一帧写下以下代码:

import fl.data.DataProvider;
import flash.events.Event;
import flash.text.TextFormat;
import fl.controls.ComboBox;

var menuTextFormat:TextFormat = new TextFormat();
menuTextFormat.align = "right";
cb.textField.setStyle("textFormat", menuTextFormat);
cb.setStyle("textFormat", menuTextFormat);
cb.setStyle("disabledTextFormat", menuTextFormat);

video.addEventListener(Event.ACTIVATE, function (event) {cb.enabled = false;})
video.addEventListener(Event.COMPLETE, function (event) {cb.enabled = true; })

var arr:Array = new Array();
for (var i=0; i<10 ; i++)
    arr.push({label:"asdfasdf", data:i})
cb.dataProvider = new DataProvider(arr);

video.start()

之后,创建foobar.as并写下以下内容:

package  {

    import flash.display.MovieClip;
    import flash.events.Event;
    import flash.utils.Timer;


    public class foobar extends MovieClip {     
        private var myTimer:Timer = new Timer(3000);

        public function start() {
            dispatchEvent(new Event(Event.ACTIVATE))
            myTimer.addEventListener("timer", timerHandler);
                        myTimer.start();
        }

        public function timerHandler(evt:Event) {
            myTimer.stop()
            dispatchEvent(new Event(Event.COMPLETE))
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我认为你需要在ComboBox“准备好”之后应用所有这些样式(可能不会立即使用)。

将所有文本格式化内容包装在函数中,并在ComboBox触发ADDED_TO_STAGE事件时调用该函数,看看是否有帮助......

 cb.addEventListener(Event.ADDED_TO_STAGE, applyMyStyle);


    function applyMyStyle(evt:Event){
       //apply style here to evt.target
    }

不确定这是否会有所帮助,但值得一试。