2011-12-02 22 views
5

Quiero medir la altura del texto dado un cierto ancho de lienzo disponible. El texto que paso es muy largo y sé que se ajustará. A tal fin, que yo llamo el siguiente:¿Por qué TextRenderer.MeasureText no funciona correctamente?

using System.Windows.Forms; 
... 
string text = "Really really long text that is sure to wrap..."; 
Font font = new Font("Arial", 14); 
Size canvas = new Size(1100, 850); 
Size size = TextRenderer.MeasureText(text, font, canvas); 

No importa lo que pase en la lona para, siempre devuelve 14 para size.Height.

¿Echo de menos algo simple?

+1

Quizás [esta respuesta] (http://stackoverflow.com/a/7714046/861565) proporciona resultados diferentes? – jadarnel27

+0

Hmm, dudo que tengas una altura de 14. Tienes problemas mucho más serios además de olvidarte de especificar cómo debe envolverse el texto si realmente lo haces. –

Respuesta

5

Por favor, utilice el parámetro TextFormatFlags medida como se muestra a continuación:

Size size = TextRenderer.MeasureText(text, font, canvas, TextFormatFlags.WordBreak); 
+0

Esto me lleva al 99%, pero el resultado no es muy preciso y la última línea de la cuerda termina siendo cortada ligeramente (como el 33% de la parte inferior). – AngryHacker

+0

Desafortunadamente, no puedo reproducir ningún corte de línea de mi lado. Por favor, publique la cadena real y el tamaño real, eso pone un problema de su parte. O intente combinar TextFormatFlags.WordBreak con TextFormatFlags.ExternalLeading. – DmitryG

+0

Lo probé, pero no tuve suerte. Todavía cortando. No puedo decir que sea culpa de la API. Estoy midiendo el texto y entregándolo a un control de terceros; podría ser que use una técnica de representación diferente. – AngryHacker

Cuestiones relacionadas