AS3 flash CC我想设置Textfield的父Movieclip的宽度

时间:2013-07-31 09:48:03

标签: actionscript-3 flash movieclip flash-cs6 displayobject

我动态创建了一堆文本字段,其数量取决于xml输入。文本字段需要启用按钮,因此我认为最简单的解决方案是将它们放入movieclip和buttonMode即movieclip。

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

我有一个变量 maxw ,其中包含最大的文本字段宽度,我希望我的所有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);
}

跟踪结果是

mcs 32.05
mcs 33
mcs 21.25

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

2 个答案:

答案 0 :(得分:1)

考虑绘制所需宽度和高度的下层Rectangle。您可以使用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();

答案 1 :(得分:0)

在考虑了一些关于你的问题之后,我认为你的问题是你添加文本的按钮的宽度完全由TextField定义,并且因为你将文本设置为autoSize,它正在抢回它的原始宽度。

要使宽度更符合您的需要,并且允许轻松点击按钮,您需要做的是在tfContainer mc中创建透明矩形,设置tfContainer的宽度,然后添加文字到按钮。