2009-08-07 6 views
0

私はこのコードを持っていますが、期待どおりに機能しません。 btnContainerは、たくさんのボタンを含むVBoxです(toggle = true)。特定の時点でそれらをリセットしてトグル解除したいと考えています。上記のコードではFlex 3:汎用オブジェクトが実際にボタンであるかどうかを確認するにはどうすればよいですか?

for (var btn:Object in btnContainer.getChildren()){ 
    if (btn.isPrototypeOf(mx.controls.Button)){ 
     btn.selected = false; 
    } 
} 

、「BTNは、」ループの各反復中と同じくらい指数(0,1,2,3、...)をアップ示し、条件が真と評価することはありません。

また、私はこれを試してみました:

for (var btn:Button in btnContainer.getChildren()){ 
    btn.selected = false; 
} 

これはbtnContainer内側のラベルもあることを除いて、正常に動作します。ラベルをボタンとしてキャストしようとするとエラーが発生します。

ここで間違っていますか?

答えて

4

は、「for each..in」ループを使用して、変数が指定されたタイプと互換性があるかどうかを確認したい場合(例えば指定されたクラスのインスタンス) is演算子を使用します。

この正確な種類のケースについては、言語リファレンスはan exampleです。

ここで、固定コードです:

for each (var btn:Object in btnContainer.getChildren()){ 
    if (btn is Button){ 
     btn.selected = false; 
    } 
} 
+0

ああ、私は脳のおならを持っていたし、それがオプションだと思ったので、私は「それぞれ」の部分を落としていました。確かに、ありがとう。 –

+0

は、 "each"がないと何か違うことを意味しています。要素の性質を反復します。ある種のイントロスペクション(時には役に立つかもしれません)。 –

2

isを試しましたか?あなたは配列の要素をループにしたい場合は

import mx.controls.Button; 

//... 
for (var key in btnContainer.getChildren()){ 
    var obj : Object = btnContainer[key]; 
    if (obj is Button){ 
     var button : Button = obj as Button; 
     button.selected = false; 
    } 
} 
関連する問題