2011-12-02 27 views
5

Chcę zmierzyć wysokość tekstu z określoną szerokością dostępnego płótna. Tekst, który przekazuję jest naprawdę długi i wiem, że zawinie. W tym celu, wzywam następujące:Dlaczego TextRenderer.MeasureText nie działa poprawnie?

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

Nieważne co mijam w na płótnie, to zawsze wraca 14 do size.Height.

Czy brakuje mi czegoś prostego?

+1

Może [ta odpowiedź] (http://stackoverflow.com/a/7714046/861565) przewiduje różne wyniki? – jadarnel27

+0

Hmm, wątpię, że uzyskasz wysokość 14. Masz znacznie więcej poważnych problemów, niż zapomnienie o tym, jak tekst powinien być zawijany, jeśli faktycznie to robisz. –

Odpowiedz

5

Proszę użyć parametru TextFormatFlags środka, jak pokazano poniżej:

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

Daje mi to 99%, ale wynik nie jest bardzo dokładny, a ostatnia linia łańcucha kończy się nieznacznie obcięciem (jak 33% od dołu). – AngryHacker

+0

Niestety, nie mogę odtworzyć żadnego cięcia linii po mojej stronie. Proszę napisać prawdziwy ciąg i rzeczywisty rozmiar, który powoduje problemy po twojej stronie. Lub spróbuj także połączyć TextFormatFlags.WordBreak z TextFormatFlags.ExternalLeading. – DmitryG

+0

Próbowałem, ale bez powodzenia. Wciąż odcięte. Nie mogę powiedzieć, że to wina API. Zmierzam tekst i przekazuję go do kontroli zewnętrznej - może to oznaczać, że używa innej techniki renderowania. – AngryHacker

Powiązane problemy