如何在另一个函数中删除动态创建的TextField

时间:2011-05-04 12:33:40

标签: flash actionscript-3

我目前正在for循环中创建文本字段 - 尽管在此示例中仅创建一个TextField。

我的问题是,如何删除另一个函数中的TextField子项? 我基本上做的是,创建一个Textfield,addchild到一个容器 - >然后将容器放到另一个位置 - >然后删除容器中的child和另一个文本。我尝试过类似的东西:

removeChild(getChildByName(myTextField2));

编辑:也许我的解决方案也可以只是将TextField的文本更改为其他内容,而不是将其删除并添加新文本。

public function handleTextFrames(numberOfFrames:Number, textFrame1:String, textFrame2:String, textFrame3:String, textFrame4:String):void

    {

        var textArray:Array = new Array(textFrame1,textFrame2,textFrame3,textFrame4);

        // Creating font instance
        var garageInstance:Font = new garage();

        //Creating the textfield object and naming it "myTextField"
        var myTextField:TextField = new TextField();

        //Here we add the new textfield instance to the stage with addchild()
        textContainer.alignContainer1.addChild(myTextField);

        //myTextField.width = 930;
        myTextField.embedFonts = true;
        myTextField.multiline = true;
        myTextField.wordWrap = false;
        myTextField.selectable = false;

        var myText:String = textArray[0];

        myTextField.htmlText = myText;

        //This last property for our textfield is to make it autosize with the text, aligning to the left.
        myTextField.autoSize = TextFieldAutoSize.LEFT;

        //This is the section for our text styling, first we create a TextFormat instance naming it myFormat
        var myFormat:TextFormat = new TextFormat();

        //Embedding font
        myFormat.font = garageInstance.fontName;

        myFormat.color = 0xffffff;
        myFormat.size = 60;
        myFormat.align = TextFormatAlign.CENTER;


        //Now the most important thing for the textformat, we need to add it to the myTextField with setTextFormat.
        myTextField.setTextFormat(myFormat);

        myTextField.y = textContainer.alignContainer1.height * 0.5 - myTextField.textHeight * 0.5;
        myTextField.x = payoffContainer_mc.width / 2 - myTextField.textWidth / 2;
    }

3 个答案:

答案 0 :(得分:2)

你到底想做什么? :)因为如果你将文本字段保存在“全局”数组中,那就可以解决它。

假设您将其保存在一个名为textfields的数组中。

var textfields:Array = [];

通过

将所有内容都推送到此处
textfields.push(textfield);

然后,您可以随时通过调用此函数来删除它:

textfields[0].parent.removeChild(textfields[0]);

关于第一个元素。在闪存中,这总是有效:

INSTANCE.parent.removeChild(INSTANCE);

这有帮助吗?

答案 1 :(得分:0)

首先给文本字段命名:

var myTextField:TextField = new TextField();
myTextField.name = "mytextfield";

然后你通过这样做来访问它:

var myTextField:TextField = textContainer.alignContainer1.getChildByName("mytextfield");

删除它:

textContainer.alignContainer1.removeChild(myTextField);
myTextField = null;

答案 2 :(得分:0)

对于一个,而不是getChildByName - 考虑只使用这个方法:

container["text_field_name"];

另外,我建议让你的removeChild()调用更严格一些,以避免出现空对象引用错误:

var tf:TextField = TextField(container["text_field_name"]);

if(tf.parent) tf.parent.removeChild(tf);

您需要从函数中访问要删除它的所有内容是“容器”,它是TextField的,以及TextField本身。

希望这有帮助。