1

フラッシュでボタンオブジェクトを作成しました。ボタンには2つのレイヤーが含まれています。1つは背景画像で、その上にtextFieldがあります。テキストフィールドは動的です。ムービークリップ内のボタンを使用して、SWCにエクスポートします。私はそれをフレックスで使おうとしています。

私はこれをやろうとしています:

var myComponent:MyComponent = new MyComponent();
myComponent.button01.theTextField.text = "Caption";

ボタンのインスタンスを取得します( FlexデバッガーではmyComponent.button01nullではありません)が、textField(myComponent.button01.theTextField)のインスタンスはnullであり、テキストを変更できません(ただし、デフォルトのテキストが表示されます)画面上で)。コードはflexで正しくコンパイルされます。誰かが何が悪いのか分かりますか?

inswcのボタンコントロールもエクスポートしました。したがって、ボタンはFlashのデフォルトのSimpleButtonではなく、flashによって生成された派生クラス(flashで定義されたシンボルと同じ名前)です。これには、nullのTextFieldメンバーが含まれています。

ボタンのタイムラインは次のとおりです(レイヤー2にはテキストフィールドが含まれ、テキストフィールドインスタンスの名前はtheTextFieldです): alt text http://img59.imageshack.us/img59/5002/timeliney.jpg

4

5 に答える 5

4

実際、問題はありません。すべてが正常に機能します。:-)

クラス (new MyComponent()) をインスタンス化した後、子オブジェクト自体はインスタンス化されず、その手順は延期されます。コンポーネントを表示リストに追加した後でのみ、すべてのサブコントロールがインスタンス化されます。そのため、実際にオブジェクトを表示リストに追加した後でのみ、サブコントロールにアクセスする必要があります。

フレックス コントロールには、まさにその目的のために使用される creationComplete イベントがあります。

オブジェクト作成の詳細については、こちらを参照してください。

于 2010-03-29T11:18:59.413 に答える
1

ボタン(SimpleButtonオブジェクト)の子を参照することはできないと思います。

Flashでクイックテストを作成し、の.textプロパティを変更しようとするtheTextFieldと、次のようなランタイムエラーが発生すると思います。

1119:静的タイプflash.display:SimpleButtonの参照を介した、未定義の可能性のあるプロパティtheTextFieldへのアクセス。

申し訳ありませんが、問題を解決する方法についての情報がありません。うまくいけば、これはあなたがそれに対する答えを理解するのを助けるための良い出発点になるでしょう。

于 2010-03-25T17:03:04.230 に答える
1

問題は、SimpleButton が最終クラスのように見えることです。つまり、それに addChild を追加したり、プロパティを動的に追加したりすることはできません。Button (flash.display.SimpleButton) と TextField を使用して簡単なテストを行いました。IDE のボタンに配置されたときに見つけることができる TextField のハンドルを取得する方法がありませんでした。ボタンをムービークリップにすると、うまくいきました。そのため、MovieClip/Sprite Symbol 内の TextField の下のレイヤーに Button インスタンスを配置する必要があります。2 つのわずかに異なる視覚的表現があったため、代わりにコードを介してシンボルを追加することになりました。

var button:MovieClip;
if (val1 < 10) {
    button = new LowButton();
    button.addEventListener(MouseEvent.CLICK, onLowClick);
    button.textField1.text = "You";
    button.textField2.text = "Stinker";
} else if (val1 > 10 && val1 < 100) {
    button = new MidButton();
    button.textField.text = "Middie";
... 

あなたはアイデアを得る!

于 2010-08-26T06:17:51.550 に答える
0

ムービークリップを作成します。

3 つのフレームを作成し、それらに名前を割り当てます: 「アウト」 - フレーム #1、「クリック」、「オーバー」。

タイムラインのようにテキストフィールドを他のレイヤーに追加します(最初の投稿で)

このコードをフレーム #1 に追加します

stop();
addEventListener(MouseEvent.MOUSE_OVER, on_over, false, 0, true);
addEventListener(MouseEvent.CLICK, on_click, false, 0, true);
addEventListener(MouseEvent.MOUSE_OUT, on_out, false, 0, true);


function on_out(e:MouseEvent):void 
{
    gotoAndStop("out");
}

function on_click(e:MouseEvent):void 
{
    gotoAndStop("click");           
}

function on_over(e:MouseEvent):void 
{
    gotoAndStop("over");
}

コードでは、このクリップをスーパー ボタンとして使用できます (作成、クリック イベント リスナーの追加、null 例外なしのキャプション テキストの割り当てなど)。

于 2010-11-17T21:11:46.113 に答える
0

theTextFieldへの参照パスに問題があるようです。Flex でデバッグしている場合は、変数タブを調べて、myComponentmyComponent.button01myComponent.button01.theTextFieldが見つかるかどうかを確認します。

于 2010-03-25T16:55:58.293 に答える