2012-02-12 97 views
5

我首先想到的是它會是這樣的:如何獲得TextBox的真實高度?

int height = textbox.lines.length * lineheight; 

,但它只是罪狀「\ XD \ n」和線條都可以被包裝。當一切都可見時(文本內部的高度),我可以獲取顯示的行數或文本框的實際高度嗎?

+2

winform wpf?什麼?你知道我們不站在你身邊,對吧? – gdoron 2012-02-12 14:18:07

+0

可能重複的[只有當文本不適合時,我如何顯示滾動條在System.Windows.Forms.TextBox?](http://stackoverflow.com/questions/73110/how-can-i-show-滾動條在系統上的窗口形式文本框只有當這個文本d) – 2012-02-12 14:38:10

+0

漢斯帕贊特,也許是部分它,但除了這一個所有的答案http://stackoverflow.com/a/4147348/1205147是錯誤的,b8adamson的回答對我來說看起來很長很大。我希望有一個更好,更好的解決方法:) – Mike 2012-02-12 15:41:36

回答

6

我不知道,如果你將永遠得到完美的測量,但這種靠攏:

private int GetTextHeight(TextBox tBox) { 
    return TextRenderer.MeasureText(tBox.Text, tBox.Font, tBox.ClientSize, 
      TextFormatFlags.WordBreak | TextFormatFlags.TextBoxControl).Height; 
} 

文本框可以是愚蠢的。在多行打開的情況下,如果您按下導致單詞換行的字符,點擊退格不會導致它「不換字」,除非我調整TextBox的大小。這是在Win7-64上。我不認爲 TextBox控件總是這樣做。

+3

TextFormatFlags.TextBoxControl使它不那麼愚蠢。 – 2012-02-12 18:32:31

+0

是的,謝謝你,拉爾斯。我已經從這個東西了:http://stackoverflow.com/a/4147348/1205147 – Mike 2012-02-13 21:33:34

+1

太棒了!我試圖結合使用Graphics.MeasureText和行數(在我的情況下不需要換行)。這種方法對於每一行計算得稍高,所以當多行時,我的方法看起來很奇怪,有額外的空間。你的方法在現場準確計算!完善!! – awe 2012-08-21 13:40:13

0

函數GetLineFromCharIndex()爲您提供了corrent行索引,即使文本被包裝了。

int lineCount = textBox1.GetLineFromCharIndex(int.MaxValue) + 1; 
int lineHeightPixel = TextRenderer.MeasureText("X", textBox1.Font).Height;