2011-12-02 112 views
5

我想測量給定一定寬度的可用畫布的文本高度。我傳入的文本很長,我知道會包裝。爲此,我把以下內容:爲什麼TextRenderer.MeasureText不能正常工作?

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

不管是什麼我通過在畫布,它總是size.Height返回14。

我是否缺少一些簡單的東西?

+1

也許[此答案](http://stackoverflow.com/a/7714046/861565)提供了不同的結果? – jadarnel27

+0

嗯,我懷疑你會得到14的高度。你有更嚴重的問題,除了忘記指定文本應該如何包裹,如果你真的這樣做。 –

回答

5

請,使用TextFormatFlags度量參數,如下所示:

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

這使我得到了99%,但結果不是很準確,並且字符串的最後一行最終被略微切斷(如從底部開始的33%)。 – AngryHacker

+0

不幸的是,我無法在我身邊重現任何線條切割。請張貼真實的字符串和實際大小,這會讓您的問題變得更爲棘手。或者,請嘗試將TextFormatFlags.WordBreak與TextFormatFlags.ExternalLeading結合使用。 – DmitryG

+0

我試過了,但沒有運氣。仍然中斷。我不能說這是API的錯誤。我正在測量文本並將其交給第三方控制 - 這可能是因爲它使用了不同的渲染技術。 – AngryHacker