AS3 flash CC Я хочу установить ширину родительского фрагмента ролика для текстового поля

Я динамически создал несколько текстовых полей, число которых зависит от ввода XML. Текстовые поля должны быть включены с помощью кнопок, поэтому я подумал, что самое простое решение - поместить их в мувиклип, а buttonMode - в этот мувиклип.

Иерархия выглядит следующим образом: main (расширяет MovieClip) -> klankoefening (MovieClip) -> Textfieldparent (a MovieClip) -> Textfield

У меня есть переменная maxw, которая содержит наибольшую ширину текстового поля, и я хочу, чтобы у всех моих родителей Textfield была эта ширина.

Я пытаюсь сделать это так:

//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

Что я нахожу странным, потому что я сказал во втором цикле, что ширина для всех родителей Textfield должна быть установлена ​​на maxw. Что происходит?

2 ответа

Решение

Рассмотрите возможность нанесения подложки Rectangle желаемой ширины и высоты. Ты можешь использовать mcs.graphics сделать это. Хитрость в том, ширина DisplayObjectContainer является расчетным свойством, и изменение его, скорее всего, приведет к изменению масштаба. Скажем, MC имеет две формы в виде детей, одну в (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, он возвращается к своему оригиналу. ширина.

То, что вам нужно сделать, чтобы сделать ширину более показательной для того, что вам нужно, и позволить легко нажимать на кнопки, это создать прозрачный прямоугольник в tfContainer mc, установить ширину tfContainer, а затем добавить текст в кнопка.

Другие вопросы по тегам