MeasureString игнорирует стили шрифтов для Arial и Times New Roman - PullRequest
2 голосов
/ 07 ноября 2011

После завершения следующего кода значения переменных «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 ]

3 голосов
/ 07 ноября 2011

На самом деле нарисуйте его в методе OnPaint (), и вы поймете, почему:

enter image description here

2 голосов
/ 07 ноября 2011

Я только что попробовал это с разными строками и ширина меняется.Я думаю, так получилось, что «WWW» имеет одинаковую длину с / без жирного стиля.Просто попробуйте в редакторе, и вы увидите, что он того же размера.

...