2011-11-07 55 views
2

完成以下代碼後,「result1」和「result2」變量(測量的字符串寬度)的值是相同的,儘管「font1」 「font2」是粗體。有趣的是,這個錯誤出現在字體「Times New Roman」和「Arial」中。例如,對於字體「Calibri」返回的值是正確的,變量「result2」的值大於變量「result1」的值。這是爲什麼發生?MeasureString忽略Arial和Times的字體樣式New Roman

using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromHwnd(IntPtr.Zero)) 
{ 
    graphics.PageUnit = System.Drawing.GraphicsUnit.Pixel; 
    graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; 
    System.Drawing.Font font1 = new System.Drawing.Font("Arial", 10.0f, System.Drawing.FontStyle.Regular); 
    System.Drawing.Font font2 = new System.Drawing.Font("Arial", 10.0f, System.Drawing.FontStyle.Bold); 
    float result1 = graphics.MeasureString("WWW", font1, int.MaxValue, System.Drawing.StringFormat.GenericTypographic).Width; 
    float result2 = graphics.MeasureString("WWW", font2, int.MaxValue, System.Drawing.StringFormat.GenericTypographic).Width; 
} 
+1

你確定它們實際上沒有相同的寬度嗎?在Microsoft Word中使用Arial和Arial Bold鍵入「WWW」時,它們看起來具有相同的寬度。 – Jacob

+0

我遇到過'MeasureString'問題。相反,我使用'TextRenderer'來測量字符串的寬度。像這樣'Size textSize = TextRenderer.MeasureText(「Hi there!」,new Font(「Arial」,12.0F);)'。 –

回答

2

我只是用不同的字符串嘗試過了,寬度是變化的。我認爲只是偶然發現「WWW」的長度與大膽的風格相同。只需在編輯器中嘗試一下,就會看到它的大小相同。

+0

確實,返回的值是正確的,錯誤在後面的計算中,我的疏忽,感謝您的幫助。 –

3

實際上繪製在OnPaint()方法,你就會明白爲什麼:

enter image description here

相關問題