MeasureString忽略Arial和Times New Roman的字体样式

时间:2011-11-07 18:13:54

标签: c# .net string system.drawing measure

完成以下代码后,“result1”和“result2”变量(字符串的测量宽度)的值是相同的,尽管“font1”是常规的而“font2”是粗体。有趣的是,这个错误出现在字体“Times New Roman”和“Arial”中。例如,对于字体“Calibri”,返回值是正确的,变量“result2”的值大于变量“result1”的值。为什么会这样?

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

2 个答案:

答案 0 :(得分:3)

实际上在OnPaint()方法中绘制它,你会明白为什么:

enter image description here

答案 1 :(得分:2)

我只是尝试了不同的字符串,宽度确实发生了变化。我认为恰好“WWW”具有相同的长度,有/没有大胆的风格。只需在编辑器中尝试它,你就会看到它的大小相同。