2013-06-12 35 views
2

我希望能夠設置多行TextBox中的行數。.NET多行文本框 - 設置行數

我已經試過如下:

int initHeight = textBox1.Height; 
textBox1.Height = initHeight * numOfLines; 

但是,這使得它太大時numOfLines變大。於是我嘗試這樣做:

float fontHeight = textBox1.CreateGraphics().MeasureString("W", textBox1.Font).Height; 
textBox1.Height = fontHeight * numOfLines; 

但是,這是太小了,當numOfLines是小,過大時numOfLines很大。

所以我做了一些錯誤的...任何想法?

+0

退房的SO張貼在這裏:調整文本框以適應內容(HTTP ://sackoverflow.com/questions/8048455/c-sharp-resize-textbox-to-fit-content) –

+0

我認爲'高度'得到的內容區域包含文本以及邊界區域等。所以如果你簡單地乘以文本行t即可他的TextBox會很快增長得比它的大。 –

+0

線條實際上由控件中允許的字符數控制。在文本框的屬性中檢查MaxLength – Sorceri

回答

3

這將設置你的多行文本框的確切Width & Height

Size size = TextRenderer.MeasureText(textBox1.Text, textBox1.Font); 
textBox1.Width = size.Width; 
textBox1.Height = size.Height + Convert.ToInt32(textBox1.Font.Size); 
+0

那麼爲什麼我需要添加字體大小? – Andrew

+0

添加字體大小可設置文本框高度,否則最後一行永遠不會正確顯示。 –

2

你在做什麼應該工作,但是你需要設置MinimumSizeMaximumSize我不是100%肯定的,但我認爲,如果高度是通過代碼設置此約束將仍持有

3

像這樣的東西應該工作:

Size size = TextRenderer.MeasureText(textBox1.Text, textBox1.Font); 
textBox1.Width = size.Width; 
textBox1.Height = size.Height; 

這是從C# Resize textbox to fit content

+0

這看起來並不如此。它只是一個關閉。 – Andrew

2

Graphics.MeasureString文檔:

要獲取適合佈局中相鄰字符串的指標(例如,在實現格式化文本時),請使用MeasureCharacterRanges方法或採用StringFormat的MeasureString方法之一,並傳遞GenericTypographic。另外,確保圖形的TextRenderingHint是AntiAlias。

因此,你應該使用這些重載之一,如this one,它允許你指定StringFormat.GenericTypograpic獲得所需要的尺寸。

試試這個:

float fontHeight; 
using (var g = textBox1.CreateGraphics()) 
    fontHeight = g.MeasureString("W", textBox1.Font, new PointF(), StringFormat.GenericTypograpic).Height; 
+0

雖然這似乎給出了一個更準確的結果......它看起來像它需要舍入無論如何... – Andrew

+0

@Andrew它不應該 - 其中有其他意見,如確保圖形是設置爲AniAlias等。如果你這樣做,理論上你應該得到適當的高度。 –