2011-12-02 17 views
5

Voglio misurare l'altezza del testo data una certa larghezza di tela disponibile. Il testo che inserisco è davvero lungo e so che si concluderà. A tal fine, io chiamo il seguente:Perché TextRenderer.MeasureText non funziona correttamente?

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); 

Non importa quello che mi passa per la tele, restituisce sempre 14 per size.Height.

Mi manca qualcosa di semplice?

+1

Forse [questa risposta] (http://stackoverflow.com/a/7714046/861565) fornisce risultati diversi? – jadarnel27

+0

Hmm, dubito che avrai un'altezza di 14. Hai problemi molto più seri oltre alla dimenticanza di specificare come il testo dovrebbe essere incartato se lo fai davvero. –

risposta

5

Si prega di utilizzare il parametro TextFormatFlags misura come illustrato di seguito:

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

Questo mi dà il 99%, ma il risultato non è molto preciso e l'ultima riga della stringa finisce per essere leggermente tagliata (come il 33% dal basso). – AngryHacker

+0

Sfortunatamente, non riesco a riprodurre alcun taglio di linea dalla mia parte. Per favore, pubblica la stringa reale e la dimensione reale, che ti mette un problema dalla tua parte. Oppure prova anche a combinare TextFormatFlags.WordBreak con TextFormatFlags.ExternalLeading. – DmitryG

+0

L'ho provato, ma senza fortuna. Sto ancora tagliando. Non posso dire che è colpa dell'API. Sto misurando il testo e consegnandolo a un controllo di terze parti - potrebbe essere che usi una diversa tecnica di rendering. – AngryHacker

Problemi correlati