2011-10-10 11 views
8

Ho bisogno di costruire una funzione in una libreria di classi che prende una stringa e un font specifico per questa stringa quindi ottenere la larghezza della stringaCome ottenere una stringa di larghezza

Quindi, come ho potuto ottenere la larghezza della stringa di confine ?

+0

Potrebbe essere unito a questo: http://stackoverflow.com/questions/5553965/programmatically-measure-string-in-asp-net – digEmAll

+0

Misurare la dimensione di una stringa per un sito Web sembra discutibile. Non c'è modo di dire quale dimensione il browser mostrerà il carattere AFAIK. – davisoa

+0

Un carattere specifico non è sufficiente per sapere questo. Devi anche sapere quale renderer mostrerà il testo. Ad esempio, Apple e MS rendono il testo in modo molto diverso e non sarei sorpreso se ciò influisse sulla larghezza grafica di un testo. Se si tenta di ottenere la larghezza del testo visualizzato in html sul lato server (come sembrano suggerire i tag) è molto probabile che non sia possibile. – CodesInChaos

risposta

12

È possibile ottenere un oggetto Graphics (utilizzando Control.CreateGraphics() sul contenitore per il quale si desidera inserire il testo) e chiamare lo MeasureString() per farlo. È una tecnica abbastanza comune GDI + .

Ulteriori informazioni da MSDN: http://msdn.microsoft.com/en-us/library/6xe5hazb.aspx

+0

Le misurazioni del testo GDI + AFAIK sono un po 'problematiche. In particolare quando si utilizza la dimensione per centrare il testo che non funziona come desiderato. – CodesInChaos

+0

Io uso il metodo 'MeasureString' e ora ho ottenuto un valore di ritorno con tipo di SizeF poi l'ho preso a PointF e ora conosco la larghezza ma in PointF >>> ne ho bisogno in cm! Provo a convertirlo come penso che il PointF sia come il punto Postscript ma penso che la mia formula di conversione non sia corretta >> quindi Come convertire dopo aver ottenuto la larghezza del poin!? – AshOoO

+1

'PointF' è solo un valore' float' per un 'Punto' (vale a dire valori non integrali). La conversione da punti a centimetri dovrebbe essere fattibile (punti-> pixel-> dpi-> pollici-> cm?) Ma perché hai bisogno di centimetri? –

14

Un altro modo per farlo è con un TextRenderer e chiamare suo metodoMeasureString, passando la stringa e il tipo di font.

MSDN Esempio:

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: Questa è solo una soluzione alternativa alla (ugualmente valido) quello già inviato da @Neil Barnwell (nel caso in cui avete già un riferimento al sistema .Windows.Forms nel tuo progetto, questo potrebbe essere più conveniente).

+0

Penso che questo funzioni solo all'interno di un applicazione Windows non progetto libreria di classi! – AshOoO

+1

@AshOoO Sono d'accordo, questo è ciò che la nota alla fine della mia risposta è tutto =) – jadarnel27

+1

Questo misurerà la dimensione del testo sul modulo corrente. Se è necessario misurare la dimensione del testo, ad esempio sull'output della stampante, sarà necessario utilizzare il metodo 'e.Graphics.MeasureString (...)'. – AaA

Problemi correlati