Как эффективно сохранить объект шрифта .Net?

Вариант использования: пользователь настраивает шрифт для объекта в области конструктора, который мне нужно загрузить / сохранить в моем хранилище данных. Т.е. такие настройки, как полужирный, курсив, размер, имя шрифта, необходимо сохранить.

Есть ли какой-нибудь простой (и надежный) механизм для преобразования / чтения из строкового представления объекта шрифта (в этом случае мне понадобится только один атрибут)? Или несколько свойств в сочетании с настраиваемой логикой - правильный вариант?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
6
0
1 180
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Используйте Тип преобразователя:

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, вы можете создать оболочку класса Font, которая будет хранить некоторое подмножество свойств Font.

Примечание (Гишу) - Никогда не обращайтесь к конвертеру типов напрямую. Вместо этого получите доступ к соответствующему преобразователю с помощью TypeDescriptor. Очень важно :)

Отлично! .. работает как разрекламировано - спасибо аку. Голосуя ближе к отметке 5К :)

Gishu 23.09.2008 12:55

Я думаю, что ConvertFromInvariantString() следует использовать как аналог ConvertToInvariantString() (вместо ConvertFromString(), как в приведенном выше примере).

miroxlav 12.05.2015 22:58

В каком типе хранилища данных вам нужно это сохранить? Если в файле могут быть сохранены только пользовательские настройки, вы можете сериализовать объект шрифта в файл настроек либо в двоичном, либо в xml (если вы хотите иметь возможность редактировать файл конфигурации напрямую). Пространства имен сериализации (System.Xml.Serialization и System.Runtime.Serialization) предоставляют все инструменты для этого без написания специального кода.

Сайт MSDN по сериализации XML: Сериализация XML в .NET Framework

[РЕДАКТИРОВАТЬ] Итак, объект шрифта не может быть сериализован. ой, извините.

Объект шрифта не сериализуем.

aku 23.09.2008 06:21

В проекте, над которым я работаю, я использовал несколько свойств.

Я сохраняю шрифт в таблице базы данных, выделяя его имя, размер, стиль и единицы измерения, а затем сохраняю эти значения.

Воссоздать шрифт по запросу после получения этих значений совсем несложно.

Другие вопросы по теме