2011-12-06 63 views
0

這是一個非常簡單的,我認爲很容易在谷歌上找到,但我不能想到的術語。如何使動態文本框推下其他控件

我正在使用CS4和AS3以及一些下面的多行動態文本框。當我填充頂部文本框時,我希望當內容流入額外的行時,它會自動壓下其下的其他文本框。

目前它只包含在每個文本框之間的空白處,但當到達下面的文本框時停止。

是否有一個屬性可以允許我(我曾在Silverlight中工作過,有在那裏的控件),我可以設置或將不得不手動實現這一點,並調用功能來重新設置所有控件y每當我改變文本框中的文本屬性?

感謝

+0

這聽起來像你真的需要在Flex中進行工作。 –

+0

即使對於這樣簡單的功能?當然它必須被內置。 – ThePower

回答

1

首先你需要的文本框將自動調整大小

myTextField.autoSize = TextFieldAutoSize.LEFT 

,那麼你需要聽的文本框的變化,或者

myTextField.addEventListener(Event.CHANGE, function(e:Event):void{ 
    var newHeight:number = myTextField.height; 
} 

基礎上,用戶打字新的高度,您可以將其他元素向上或向下移動

1

I沒有意識到任何財產很容易做到這一點,但我已經手動實現了類似的東西。每當你想調整文本框調用類似這樣的功能: (未測試的代碼)

private function arrangeText():void { 

    var maxWidth:Number = 400; //the ending width of your 

    //Set width to something low for all textfields, 
    //to get accurate reading of textWidth 
    txtTitle.width = 200; 
    txtSub.width = 200; 

    //Set autosizing temporarily 
    txtTitle.autoSize = TextFieldAutoSize.LEFT; 
    txtSub.autoSize = TextFieldAutoSize.LEFT; 

    //Get roughly the number of lines required to display all the text 
    var titleLines:Number = Math.ceil(txtTitle.textWidth/maxWidth) - 1; 
    var subLines:Number = Math.ceil(txtSub.textWidth/maxWidth) - 1; 

    //Now that you know roughtly how many lines are needed, 
    //Take off autosizing 
    txtTitle.autoSize = TextFieldAutoSize.NONE; 
    txtSub.autoSize = TextFieldAutoSize.NONE; 

    //set textfield widths bask to normal 
    txtTitle.width = maxWidth; 
    txtSub.width = maxWidth; 

    //Apply new height values to textfields 
    //Prevent textfields from being too tall as well with the "> 3" part 
    txtTitle.height = (titleLines > 3 ? 100 : txtTitle.textHeight) + 5; 
    txtSub.height = (subLines > 3 ? 60 : txtSub.textHeight) + 5; 

    //Starting from the top going down 
    //Move each of your textfields under the previous one 
    txtSub.y = txtTitle.x + txtTitle.height; 

} 
+0

您強調'我們現在大概知道會有多少行',但是您隨機將文本框寬度設置爲200(全寬的一半)。我不認爲大致正確就足以滿足客戶的高端產品。爲什麼還有3行的隨機檢查?有三條以上的線路有什麼特別之處?還有魔術100,60和5,他們代表什麼? – ThePower

+0

好問題讓我解釋一下。如果再次通讀代碼,200寬度是一個臨時狀態,可以立即通過「.autoSize」屬性進行調整。您應該能夠將其設置爲400或更少,結果相同。當你計算你正在使用的實際文本寬度由「.autoSize」決定。這3條線只是一種控制佈局的方法,如果它最終會說50行,那麼這將完全破壞佈局,所以應該有一些限制。其他值應該從您的textFields高度/字體大小計算。 5是額外的填充。 – ToddBFisher

+0

啊,好吧,我幫你。由於我使用的是滾動條,所以我的頭腦處於不同的環境中,所以我無法把頭轉向它。感謝宣言。 – ThePower

相關問題