Actionscript 3 AS3 flash CC我想设置文本字段的父Movieclip的宽度

Actionscript 3 AS3 flash CC我想设置文本字段的父Movieclip的宽度,actionscript-3,flash,movieclip,flash-cs6,displayobject,Actionscript 3,Flash,Movieclip,Flash Cs6,Displayobject,我动态创建了一组文本字段,其数量取决于xml输入。文本字段需要启用按钮,所以我认为最简单的解决方案是将它们放在movieclip中,并将其按钮化为movieclip 层次结构如下所示:main(扩展MovieClip)->klankoefening(一个MovieClip)->Textfieldparent(一个MovieClip)->Textfield 我有一个变量maxw,其中包含最大的textfield宽度,我希望我所有的Textfieldparents都有这个宽度 我试着这样做: //g

我动态创建了一组文本字段,其数量取决于xml输入。文本字段需要启用按钮,所以我认为最简单的解决方案是将它们放在movieclip中,并将其按钮化为movieclip

层次结构如下所示:main(扩展MovieClip)->klankoefening(一个MovieClip)->Textfieldparent(一个MovieClip)->Textfield

我有一个变量maxw,其中包含最大的textfield宽度,我希望我所有的Textfieldparents都有这个宽度

我试着这样做:

//generate textfields
keuzes = new XMLList(lijstOpties.categorie.(@cat == catname));
var nrs:int = keuzes.keuze.length(); //aantal keuzemogelijkheden
var maxw:int = 0; //grootste breedte tf, nodig voor bepalen breedte knoppen

for (var nr:int = 0; nr < nrs; nr++) { 
    var tf:TextField = createTextfield(werkfmt);
    tf.text = keuzes.keuze[nr].toString();
    tf.autoSize = "center";
    tf.background = true;
    tf.backgroundColor = 0xffcc33;
    tf.border = true;
    tf.borderColor = 0x000000;
    tf.name = "keuzetf";
    tf.selectable = false;
    tf.x = 0;
    tf.y = 0;

    if (tf.width > maxw) {maxw = tf.width;}

    var tfcontainer:MovieClip = new MovieClip();
    tfcontainer.buttonMode = true;
    tfcontainer.name = keuzes.keuze[nr].toString();
    tfcontainer.addChild(tf);

    klankoefening.addChildAt(tfcontainer,nr);
}

for (var an:int = 0; an < 3; an++) {
    var mcs:MovieClip = klankoefening.getChildAt(an) as MovieClip;
    mcs.width = maxw;
    trace ("mcs " + mcs.width);

    var mtf:TextField = mcs.getChildAt(0) as TextField;
            trace ("mtf " + mtf.text);
}

我觉得这很奇怪,因为我在第二个循环中指出,所有Textfieldparents的宽度都应该设置为maxw。发生了什么?

考虑绘制一个具有所需宽度和高度的参考底图
矩形。您可以使用
mcs.graphics
来执行此操作。诀窍是,
DisplayObjectContainer
的宽度是一个计算属性,更改它可能会导致比例的更改。比方说,一个MC有两种形状,一种是chilren,一种是(1000,0),另一种是(0,0),两种形状的宽度都是10,MC的合成宽度是1010。因此,与其改变宽度,不如在MC上绘制一个矩形来模拟宽度的变化

mcs.graphics.clear();
mcs.graphics.lineStyle(0,0,0);
mcs.graphics.beginFill(0x808080,0); // bogus filled rect, to capture events
mcs.graphics.drawRect(0,0,maxw,maxh); // height is needed too
mcs.graphics.endFill();

在仔细考虑了一下您的问题之后,我认为您的问题在于,您添加文本的按钮的宽度完全由TextField定义,并且由于您将文本设置为autoSize,因此它会弹回到原始宽度


要使宽度更能指示您需要的内容,并允许轻松单击按钮,您需要做的是在TFMC容器中创建一个透明矩形,设置TFMC容器的宽度,然后将文本添加到按钮。

如果在将按钮添加到movieClip后设置按钮的宽度,你将在按钮内得到文本字段的拉伸。我尝试关闭自动调整大小,但没有任何区别。因为晚祷的答案更详细了一点,所以我接受了(并无耻地复制了代码),谢谢你的帮助!
mcs.graphics.clear();
mcs.graphics.lineStyle(0,0,0);
mcs.graphics.beginFill(0x808080,0); // bogus filled rect, to capture events
mcs.graphics.drawRect(0,0,maxw,maxh); // height is needed too
mcs.graphics.endFill();