Как мне эффективно сохранить .Объект Net font?
-
02-07-2019 - |
Вопрос
Использование:Пользователь настраивает шрифт для объекта на поверхности дизайна, который мне нужно загрузить / сохранить в мое хранилище данных.То есть.такие настройки, как Полужирный шрифт, Курсив, Размер, Название шрифта, должны сохраняться.
Существует ли какой-нибудь простой (и надежный) механизм для преобразования / обратного чтения из строкового представления объекта font (в этом случае мне понадобится только один атрибут)?Или несколько свойств в сочетании с пользовательской логикой - правильный вариант?
Решение
Использование Преобразователь типов:
Font font = new Font("Arial", 12, GraphicsUnit.Pixel);
TypeConverter converter = TypeDescriptor.GetConverter(typeof (Font));
string fontStr = converter.ConvertToInvariantString(font);
Font font2 = (Font) converter.ConvertFromString(fontStr);
Console.WriteLine(font.Name == font2.Name); // prints True
Если вы хотите использовать сериализацию XML, вы можете создать оболочку класса шрифта, которая будет хранить некоторое подмножество свойств шрифта.
Примечание (Gishu) - Никогда не обращайтесь к преобразователю типов напрямую.Вместо этого получите доступ к соответствующему конвертеру с помощью TypeDescriptor.Очень важно :)
Другие советы
В проекте, над которым я работаю, я использовал несколько свойств.
Я сохраняю шрифт в таблице базы данных, выделяя его имя, размер, стиль и единицу измерения, а затем сохраняю эти значения.
Воссоздать шрифт по требованию после восстановления этих значений несложно.
Какой тип хранилища данных вам нужен, чтобы сохранить это?Если в файле могут сохраняться только пользовательские настройки, вы можете сериализовать объект font в файл настроек в двоичном формате или xml (если вы хотите иметь возможность редактировать конфигурационный файл напрямую).Пространства имен сериализации (System.Xml.Serialization и System.Runtime.Serialization) предоставляют все инструменты для этого без написания пользовательского кода.
Сайт MSDN по сериализации XML: Сериализация XML в .Net Framework
[РЕДАКТИРОВАТЬ] Итак, в настоящее время объект font не является сериализуемым.упс : ( Извините.