我在第一帧的舞台上有一个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))
}
}
}
答案 0 :(得分:0)
我认为你需要在ComboBox“准备好”之后应用所有这些样式(可能不会立即使用)。
将所有文本格式化内容包装在函数中,并在ComboBox触发ADDED_TO_STAGE事件时调用该函数,看看是否有帮助......
cb.addEventListener(Event.ADDED_TO_STAGE, applyMyStyle);
function applyMyStyle(evt:Event){
//apply style here to evt.target
}
不确定这是否会有所帮助,但值得一试。