2010-11-27 9 views
0

ボタン付きVBoxがあります。私はボタンをクリックした後、ラベルを変更したいと思う。私はコードビハインドプラクティスを使用しようとしていますが、ボタンのインスタンスは常にnullです。コードがあります:Flex 3:コードビハインドの問題

package TestPackage 
{ 
    import mx.containers.VBox; 
    import mx.controls.Button; 
    public class ControlsBox extends VBox 
    { 
     [Bindable] 
     public var btnPlay : Button; 
     public function ControlsBox() 
     { 
      super(); 
     } 
     override protected function childrenCreated():void 
     { 
      super.childrenCreated(); 
     } 
     public function ChangeImage():void 
      { 
       btnPlay.label = "a"; 
      } 
    } 
} 

Here is mxml: 
<?xml version="1.0" encoding="utf-8"?> 
<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    xmlns:controls="TestPackage.*"> 
<controls:ControlsBox id="ctrlVBox"> 
     <mx:Button id="btnPlay" click="this.ctrlVBox.ChangeImage();" label="c"></mx:Button> 
</controls:ControlsBox> 
</mx:Application> 

私は間違っていますか?そして、それをどうやって行うのか? おかげ

答えて

0

は、私は非常に多くの場合、Flexでこれをしない、私はあなたがこのような何かしたいと思う:

<controls:ControlsBox id="ctrlVBox"> 
    <controls:btnPlay> 
     <mx:Button click="this.ctrlVBox.ChangeImage();" label="c"></mx:Button> 
    </controls:btnPlay> 
</controls:ControlsBox> 
+0

がうーん....奇妙に見えますが...私はボタンを持つようにしたいと私コードビハインドからそれを扱う機会を得たいと思っています...あなたのコードでは、別のボタンを挿入する必要があります。なぜなら...どうもありがとう... – mimic

+0

codebehindは、 'Button'型のインスタンスを保持できる*変数*' btnPlay'を宣言しますが、変数の値は最初はnullです - コードビハインドは実際にはボタンインスタンス。代わりに、ボタン*インスタンス*はmxmlステートメント ''によって作成されます。 ''内の 'Button'の位置は、新しい' Button'インスタンスを 'btnPlay'変数に割り当てるようにMXMLに指示します。奇妙な構文ですが、うまくいくはずです。 – Lee

+0

[スパークスキニング](http://help.adobe.com/en_US/flex/using/WSC8DB0C28-F7A6-48ff-9899-7957415A0A49.html)は、あなたがしようとしていることにはるかに適しています。このようなことは、.NETの "コードビハインド"コンセプトではじめて試みるよりもはるかに簡単です。具体的には、[Skin Parts](http://www.adobe.com/devnet/flex/articles/flashbuilder4_skin_parts.html)を参照してください。 – Lee

関連する問題