2011-10-10 13 views
8

Necesito construir una función en una biblioteca de clases que toma una cadena y una fuente específica para esta cadena a continuación, obtener el ancho de la cadenaCómo obtener una cadena de anchura

Entonces, ¿cómo podría conseguir el ancho límite cadena ?

+0

Podría combinarse con esto: http://stackoverflow.com/questions/5553965/programmatically-measure-string-in-asp-net – digEmAll

+0

La medición del tamaño de una cadena para un sitio web suena cuestionable. No hay forma de saber qué tamaño de navegador mostrará la fuente AFAIK. – davisoa

+0

Una fuente específica no es suficiente para saber esto. También necesita saber qué representador mostrará el texto. Por ejemplo, Apple y MS procesan el texto de manera muy diferente, y no me sorprendería si eso afectara el ancho gráfico de un texto. Si intentas obtener el ancho del texto que se muestra en html en el lado del servidor (como parecen implicar tus etiquetas), eso probablemente no sea posible. – CodesInChaos

Respuesta

12

Puede obtener un objeto Graphics (usando Control.CreateGraphics() en el contenedor para el que desea enviar el texto) y llame al MeasureString() para hacerlo. Es una técnica bastante común GDI + .

Más información de MSDN: http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx

+0

Las mediciones de texto AFAIK GDI + son un poco problemáticas. En particular, cuando se usa el tamaño para centrar el texto que no funciona como se desea. – CodesInChaos

+0

Utilizo el método 'MeasureString' y ahora obtuve un valor de retorno con el tipo de SizeF luego lo puse en PointF y ahora sé el ancho, pero en PointF >>> lo necesito en cm. Intento convertirlo, ya que creo que PointF es como el punto Postscript, pero creo que mi fórmula de conversión no es correcta >> entonces, ¿cómo convertir después de obtener el ancho de poinf? – AshOoO

+1

'PointF' es solo un valor' float' para un 'Point' (es decir, valores no integrales). La conversión de puntos a centímetros debería ser factible (puntos-> píxeles-> dpi-> pulgadas-> cm?) Pero ¿por qué necesita centímetros? –

14

Otra forma de hacerlo es con un TextRenderer, y llamar a su método MeasureString, pasando la cadena y el tipo de letra.

MSDN Ejemplo:

private void MeasureText1(PaintEventArgs e) 
{ 
    String text1 = "Measure this text"; 
    Font arialBold = new Font("Arial", 12.0F); 
    Size textSize = TextRenderer.MeasureText(text1, arialBold); 
    TextRenderer.DrawText(e.Graphics, text1, arialBold, 
     new Rectangle(new Point(10, 10), textSize), Color.Red); 
} 

NOTA: Esto es sólo una solución alternativa a la (igualmente válidas) uno ya publicado por @Neil Barnwell (en caso de que ya tienen una referencia al Sistema .Windows.Forms en su proyecto, esto podría ser más conveniente).

+0

Creo que esto solo funciona dentro de un ¡aplicación de Windows, no proyecto de biblioteca de clases! – AshOoO

+1

@AshOoO Estoy de acuerdo, de eso se trata la nota al final de mi respuesta =) – jadarnel27

+1

Esto medirá el tamaño del texto en el formulario actual. Si necesita medir el tamaño del texto, por ejemplo, en la salida de la impresora, necesitará usar el método 'e.Graphics.MeasureString (...)'. – AaA

Cuestiones relacionadas