2012-02-12 13 views
5

Mi primer pensamiento fue que sería algo como esto:¿Cómo obtener la altura real de TextBox?

int height = textbox.lines.length * lineheight; 

Sin embargo, sólo cuenta "\ xd \ n" y líneas puede ser envuelto. ¿Puedo obtener el número de líneas visualizadas o la altura real del cuadro de texto cuando todo está visible (el alto del texto en el interior)?

+2

winform wpf? ¿Qué? Usted sabe que no estamos parados a su lado, ¿verdad? – gdoron

+0

posible duplicado de [¿Cómo puedo mostrar las barras de desplazamiento en un System.Windows.Forms.TextBox solo cuando el texto no encaja?] (Http://stackoverflow.com/questions/73110/how-can-i-show- scrollbars-on-a-system-windows-forms-textbox-only-when-the-text-d) –

+0

Hans Passant, tal vez en parte lo es, pero todas las respuestas allí además de esta http://stackoverflow.com/a/4147348/1205147 están equivocados, y la respuesta de b8adamson parece bastante larga y audaz para mí. Esperaría que haya una mejor y mejor solución :) – Mike

Respuesta

6

No sé si alguna vez obtener una medición perfecta, pero esto se acerca:

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

El cuadro de texto puede ser torpe. Con multilínea encendida, si presiona un carácter que hace que la palabra se ajuste a la palabra, presionar el retroceso no hace que se "elimine la palabra" a menos que cambie el tamaño del cuadro de texto. Esto fue en un Win7-64. Yo no creo que el control TextBox siempre lo hizo.

+3

TextFormatFlags.TextBoxControl hace que sea un poco menos tonto. –

+0

Sí, gracias, Lars. Ya hice algo con esto: http://stackoverflow.com/a/4147348/1205147 – Mike

+1

¡Genial! Traté de usar Graphics.MeasureText en combinación con varias líneas (no es necesario incluir palabras en mi caso). Este método calculó un poco demasiado alto para cada línea, así que cuando muchas líneas, mi método se veía extraño con espacio extra. ¡Su método calculado exactamente sobre el terreno! ¡¡Perfecto!! – awe

0

La función GetLineFromCharIndex() le da el índice de línea corrent, incluso si el texto está ajustado.

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