2013-07-31 2 views
0

xml 입력에 따라 숫자가 달라지는 텍스트 필드를 동적으로 만들었습니다. 텍스트 필드는 버튼을 사용할 수 있어야하므로 가장 쉬운 솔루션은 동영상 클립에 넣고 buttonMode는 동영상 클립으로 만드는 것입니다.AS3 플래시 CC 텍스트 필드의 부모 무비 클립의 너비를 설정하려고합니다.

이 계층 구조는 다음과 같습니다 : 주 (무비 클립 확장) -> klankoefening의 (a 무비 클립) -> Textfieldparent의 (a 무비 클립) -> 텍스트 필드

나는 가장 큰 텍스트 필드의 폭이 들어있는 변수 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으로 설정해야합니다. 무슨 일 이니?

+0

버튼을 무비 클립에 추가 한 후 버튼의 너비를 설정하는 경우 해당 버튼 내에서 TextField를 늘릴 수 있습니다. – Glitcher

답변

1

원하는 너비와 높이의 밑받침 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(); 
+0

젠장. 나를 때려. – Glitcher

+0

고마워,이 완벽하게 작동합니다 :) – silvith

0

문제에 대해 좀 더 생각 후, 나는 당신의 문제는 버튼이 완전히 텍스트 필드에 의해 정의 된 폭으로 텍스트를 추가하고, 당신이 autoSize의 텍스트를 설정하고 있기 때문에 것을 생각 , 원래의 너비로 되돌아갑니다.

넓이를 더 많이 나타내려면 버튼을 클릭하기 만하면됩니다. tfContainer mc에 투명 사각형을 만들고 tfContainer의 너비를 설정 한 다음 버튼에 텍스트.

+0

나는 autoSize를 끄는 시도했지만 아무런 차이가 없습니다. 베스 퍼스 (Vespers) 대답이 좀 더 자세했기 때문에 나는 그것을 받아 들였고 (뻔뻔하게도 코드를 복사했다.) 도움을 주셔서 감사합니다! – silvith

관련 문제