2012-02-12 11 views
5

私の最初に考えたのは、それはこのようなものになるだろうだった。TextBoxの実際の高さを取得するには?

int height = textbox.lines.length * lineheight; 

しかし、それだけでは「\ XDの\ n」をカウントし、行がラップすることができます。すべてが表示されているときに表示される行数または実際のテキストボックスの高さ(テキストの高さ)を取得できますか?

+2

winform wpf?何?あなたは私たちがあなたの隣に立っていないことを知っていますよね? – gdoron

+0

可能な複製[テキストが収まらない場合にのみ、System.Windows.Forms.TextBoxのスクロールバーを表示するにはどうすればよいですか?](http://stackoverflow.com/questions/73110/how-can-i-show- scrollbars-on-a-system-windows-forms-text-box-only-text-d) –

+0

ハンス・パッセンジャー、おそらく一部ですが、これ以外にもすべての回答がありますhttp://stackoverflow.com/a/4147348/1205147は間違っていて、b8adamsonの答えはかなり長くて大胆に見えます。私はより良い、より良い回避策があると思います:) – Mike

答えて

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はちょっと馬鹿だ。 –

+0

よろしくお願い致します。私はすでにこれから何かを作った:http://stackoverflow.com/a/4147348/1205147 – Mike

+1

素晴らしい!私はGraphics.MeasureTextをいくつかの行と組み合わせて使用​​しようとしました(私の場合はワードラップは必要ありません)。この方法は、各行に対してわずかに高すぎると計算されたので、多くの行では、私の方法は余分なスペースで奇妙に見えました。あなたの方法はその場で正確に計算されます!完璧! – awe

0

GetLineFromCharIndex()関数は、テキストが折り返されていても、償却線のインデックスを返します。

int lineCount = textBox1.GetLineFromCharIndex(int.MaxValue) + 1; 
int lineHeightPixel = TextRenderer.MeasureText("X", textBox1.Font).Height; 
関連する問題