Я указываю шрифт для кнопки a_Simpler
Если это шрифт не добавлен в библиотеку шрифтов:
То она пишет обычным шрифтом Microsoft Sans Serif
Можно ли сохранить шрифт a_Simpler вместе с .exe? или как решить проблему?
Ответ
Компиляция из ответов на en.SO:
Трюк состоит в том, чтобы положить шрифт в глобальную PrivateFontCollection, и использовать его оттуда. (Саму коллекцию, судя по всему, нужно положить в главный класс приложения или другое общедоступное место.)
Если он уже там у вас есть, и коллекция определена как PrivateFontCollection pfc, используйте такую конструкцию:
b.Font = new Font(pfc.Families[0], <тут указываете размер>);
Ещё нужно установить в свойствах UI-элемента UseCompatibleTextRendering в true
Вместо индекса 0 может понадобиться другой, если вы кладёте в коллекцию несколько шрифтов.
Как можно добавить шрифт в коллекцию? Для этого используются методы AddFontFile и AddMemoryFont. Если вы таскаете шрифт в файле, то всё совсем просто: pfc.AddFontFile(<тут путь к вашему файлу со шрифтом>);
Если вы решили положить шрифт в ресурсы, понадобится более сложный код.
var fontdata = Properties.Resources.Simpler; // Simpler - имя, которое вы дали шрифту
var length = fontdata.Length; // в ресурсах
var unsafeData = Marshal.AllocCoTaskMem(length);
Marshal.Copy(fontdata, 0, unsafeData, length);
pfc.AddMemoryFont(unsafeData, length);
Marshal.FreeCoTaskMem(unsafeData);
Источники: [1], [2], [3], [4]
Комментариев нет:
Отправить комментарий