2012-02-12 108 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; 
相关问题