2012-02-12 2 views
5

내 첫번째 생각은이 같은 것이었다TextBox의 실제 높이를 얻는 방법은 무엇입니까?

int height = textbox.lines.length * lineheight; 

그러나 그것은 단지 \ "의 XD \ 없음"을 계산하고 라인을 포장 할 수있다. 모든 것이 보일 때 (텍스트 내부의 높이) 표시된 줄의 수나 실제 텍스트 높이를 얻을 수 있습니까?

+2

winform wpf? 뭐? 우리가 너 옆에 서 있지 않다는 것을 알지? – gdoron

+0

가능한 복제본 [텍스트가 맞지 않을 때만 System.Windows.Forms.TextBox의 스크롤 막대를 어떻게 표시 할 수 있습니까?] (http://stackoverflow.com/questions/73110/how-can-i-show- 스크롤바 -에 - 시스템 - 윈도우 - 양식 - 텍스트 - 경우에만 - 텍스트 - d) –

+0

한스 Passant, 어쩌면 부분적으로,하지만이 모든 답변을 거기 이외의 모든 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; 
} 

텍스트 상자가 바보가 될 수 있습니다. 여러 줄이 켜져있는 상태에서 단어를 줄 바꾸기로 만드는 문자를 누르면 Backspace를 눌러도 TextBox 크기를 조정하지 않으면 단어 줄 바꿈을하지 않아도됩니다. 이것은 Win7-64에있었습니다. 나는하지 않는다 TextBox 컨트롤은 항상 그렇게했다.

+3

TextFormatFlags.TextBoxControl은 좀 바보 같다. –

+0

네, 고마워요, 라스. 나는 이미 이것으로부터 뭔가를 만들었습니다 : http://stackoverflow.com/a/4147348/1205147 – Mike

+1

위대한! Graphics.MeasureText를 줄 수와 함께 사용하려고했습니다. (필자의 경우에는 단어 줄 바꾸기가 필요하지 않았습니다.) 이 방법은 각 라인마다 약간 높게 계산되었으므로 많은 라인이있을 때, 나의 방법은 여분의 공간으로 이상하게 보였다. 귀하의 방법은 그 자리에서 정확하게 계산됩니다! 완전한!! – awe

0

GetLineFromCharIndex() 함수는 텍스트가 래핑 된 경우에도 corrent 라인 인덱스를 제공합니다.

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