2012-01-18 47 views
1

我在第一幀的舞臺上有一個組合框(稱爲cb)。我想將它的樣式設置爲與右側對齊的文本字段。在開始時,首先禁用一些其他組件的事件,並在一段時間後重新啓用組合框。未使用Flash AS3組合框樣式

我使用以下代碼來設置風格(第一框架上):

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,並將一個攝像頭連接到調度該事件的視頻組件。

當閃光燈啓動時,風格不活動,文本左對齊。當第一個事件發生時,組合框變爲禁用狀態。仍然左對齊。之後,第二個事件啓用它並應用樣式,它對齊。

我希望它從第一次對齊。我試圖從AS中禁用/啓用組件,但無法工作,似乎需要一點時間來應用樣式。

我也檢查了風格設置,我寫了一個計時器和跟蹤對齊方式,但它說的是正確的,所以風格在那裏只是沒有使用。

我試圖用AS從addChild手動添加組件,但仍然沒有成功。

我該如何強制它使用風格?

感謝您的任何想法!

環境:

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

更新: 我想通了如何做一個簡單的概念:

在舞臺上,我滴個組合框(實例名CB)和庫命名爲一個符號foob​​ar(實例名稱視頻)。在第一幀寫入如下代碼:

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

當第一個事件發生時,組合框變爲禁用狀態,寫入menuTextFormat.align =「right」; – 2012-01-19 09:29:48

+0

沒有工作,但感謝您的建議!奇怪的是,在第一次禁用/啓用事件之後,它在所有後續事件中對齊,所以它似乎只是第一次不使用該風格。 – face 2012-01-19 11:23:20

+0

你可以提供一些代碼來顯示你是如何啓用和禁用組合框,因爲我正在創建一個例子,它適用於我。 – 2012-01-19 11:33:44

回答

0

我認爲你需要應用所有這些樣式後的組合框是「準備「(可能不會馬上)。

包裹在一個函數中的所有文本格式的東西,調用函數時,組合框激發它的ADDED_TO_STAGE事件,看看是否有幫助?

cb.addEventListener(Event.ADDED_TO_STAGE, applyMyStyle); 


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

不知道這會有所幫助,但它是值得一槍。

+0

我也試過,但它也沒有工作。當然,我注意,如果它在舞臺上,它不會觸發ADDED_TO_STAGE,因爲它會在addEventListener之前運行,所以我嘗試從AS添加組件。這種風格也是錯誤的。謝謝你的提示! – face 2012-01-20 11:57:13