0

クリック イベントが発生したときに、いくつかのテキスト フィールドを作成します。選択したテキストフィールドのテキスト形式を変更したいと思います。ただし、フォーマットは最後に作成されたテキストフィールドに適用されるだけです。私は次のことを試しました:

function _txtbtn(e:*):void
{
    myText = new TextField();
    mc3 = new MovieClip();
    myText.text = "text...";
    myFormat.font = "Arial";
    myFormat.color = txt_color()
    myText.setTextFormat(myFormat);
    mc3.addChild(myText);
    addChild(mc3);
    mc3.x = _can.x;
    mc3.y = p;
    p= mc3.y+mc3.height+10;
    mc3.addEventListener(MouseEvent.MOUSE_DOWN,_select)
}

function _select(e:MouseEvent):void
{
    tool_stage.combo.addEventListener(Event.CHANGE,_font)
}

function _font(e:Event):void
{
    format.font = tool_stage.combo.selectedLabel;
    myText.setTextFormat(format);
}
4

1 に答える 1

0

変数 myText は最後のオブジェクトを参照するため、そのとおりです。

これの代わりに、イベントから現在の TextField オブジェクトを取得できます。各イベントには、イベントを発生させたオブジェクトを参照する currentTarget 値があります。次に、 currentTarget を自分のタイプにキャストして、それを使用してアクションを実行できます。

残念ながら、私はあなたのコード全体を持っていません。そのため、私は自分のバージョンを持っています。参考になると思いますのでご覧ください。

//Main.as

package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFormat;

public class Main extends Sprite
{
    private var button:Sprite;
    private var p:int = 50;
    private var x0:int = 20;

    public function Main()
    {
        init();
    }

    private function init():void
    {
        button = new Sprite();

        button.graphics.beginFill(0xFFCC00);
        button.graphics.drawRect(0, 0, 80, 20);
        button.graphics.endFill();

        button.addEventListener(MouseEvent.CLICK, onBtnClick);

        this.addChild(button);
    }

    private function onBtnClick(e:*):void
    {
        var myFormat:TextFormat = new TextFormat();

        var myText:TextField = new TextField();
        var mc3:MovieClip = new MovieClip();
        myText.text = "text...";
        myFormat.font = "Arial";
        myFormat.color = 0x000000;
        myText.setTextFormat(myFormat);

        mc3.addChild(myText);

        addChild(mc3);
        mc3.x = x0;
        mc3.y = p;

        p= mc3.y+mc3.height+10;

        myText.addEventListener(MouseEvent.CLICK, onTextClick)
    }

    private function onTextClick(evt:MouseEvent):void
    {
        var newFormat:TextFormat = new TextFormat();
        newFormat.size = 30;
        newFormat.font = "Verdana";
        (evt.currentTarget as TextField).setTextFormat(newFormat);
    }
}
}
于 2013-02-02T14:55:24.477 に答える