Я ломаю голову, пытаясь понять несоответствие между размерами шрифтов, которые выбирают или задают пользователи (например, используя FontDialog ), и размером em, сообщаемым Font класс в .NET.
Например:
using (FontDialog dlg = new FontDialog()) {
if (dlg.ShowDialog() == DialogResult.OK) {
Console.WriteLine("Selected font size: " + dlg.Font.SizeInPoints.ToString("0.##"));
}
}
Используя приведенный выше код, вы получите некоторые запутанные результаты:
При выборе 11 в диалоговом окне выдается 11.25
Выбор 12 в диалоговом окне дает 12
Выбор 14 в диалоговом окне дает 14,25
Выбор 16 в диалоговом окне дает 15,75
Это происходит независимо от выбранного вами шрифта. Как видно из вышесказанного, в расхождении нет никакой закономерности, она, кажется, изменяется случайным образом между +0.25 и -0.25.
Я обхожу это в пользовательских интерфейсах, когда только отображаю размер шрифта как округленное целое число, но клянусь, что видел пакеты обработки текста / DTP, которые позволяют пользователям выбирать дробные размеры шрифта - и эти пакеты не отображаются вышеуказанное поведение при взаимодействии с диалоговыми окнами шрифтов Windows.
Может ли кто-нибудь дать рациональное объяснение этому? Есть ли лучший метод для отображения размера шрифта в пользовательском интерфейсе? Как насчет того, когда пользователь хочет получить дробный размер, например «10 .5»?