Willtwinny Ответов: 3

Преобразование строки в шрифт


У меня есть проблема, я хочу иметь возможность преобразовать строку, сгенерированную окном FontDialog, обратно в шрифт.

Дело в том, что я должен хранить информацию, сгенерированную FontDialog, в списке. Listboxes принимает только строки, а не шрифты, поэтому я должен преобразовать шрифт в строку. Это не проблема. Вывод шрифта при преобразовании в строку выглядит следующим образом:

[Шрифт: Name=Corbel, Size=14.25, Units=3, GdiCharSet=0, GdiVerticalFont=False]

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

Пожалуйста, кто-нибудь может пролить немного света и помочь мне?

спасибо :)

3 Ответов

Рейтинг:
24

Sergey Alexandrovich Kryukov

Строка и шрифт не имеют ничего общего, не могут быть преобразованы каким-либо разумным способом.

Вы можете разобрать некоторую текстовую информацию и создать на ее основе шрифт, см. Класс System.Drawing.Font и его конструкторы, http://msdn.microsoft.com/en-us/library/system.drawing.font.aspx[^].

—СА


Nish Nishant

Хороший ответ. Проголосовали 5.

Sergey Alexandrovich Kryukov

Спасибо, Нишант.
--СА

AspDotNetDev

Моя рекомендация (см. Мой ответ) состоит в том, чтобы сериализовать / десериализовать из XML.

Sergey Alexandrovich Kryukov

Да, проголосовали 5.
--СА

Рейтинг:
2

Member 12928891

var fC = new FontConverter (); / / < - = классный трюк, теперь смотрите...

// Из строки:
PrintFont = fC. ConvertFromString (yourString) как шрифт;

// В строке:
string yourString = fC. ConvertToString(PrintFont);


// Теперь, если вы хотите, чтобы вернуть сценарий для указанного шрифта, а также.
/ есть еще несколько шагов. Во-первых, вам придется сохранить значение.
Распечатки.По умолчанию.GdiCharSet = _font.Dialog. Font.GdiCharSet; / / тип байта.

// или
byte gdiValue = PrintFont. GdiCharSet; / / что-то в этом роде.

// Или вы можете сохранить его как int с помощью:
инт gdiValue = PrintFont.GdiCharSet.Метод GetHashCode();

// Но как бы то ни было, сценарий не возвращается вместе со шрифтом.
// вы сохраняете его в виде строки текстового файла или Settings. setting, в любом случае.
// byte или int. И _fontDialog.Font.GdiCharSet не имеет сеттера. Так ты и есть
// в значительной степени облажался...(sic)...если только ты не сделаешь это по-моему. Лол Джей Кей...

// Таким образом, Вы загрузили свой PrintFont обратно, используя вышеизложенное. Но вы хотите
// чтобы также вернуть скрипт для сохраненного шрифта. Сохранив этот GdiCharSet
/ кроме того, вы просто складываете их вместе. Мой метод делает это так же просто, как:

PrintFont = GetFontWithScript();

// После этого ^ вызова все, что вам нужно сделать, это назначить его с помощью:
_fontDialog.Font = PrintFont; / / и вы будете полностью настроены.

/ И вот как это снова соединяет их вместе.

частный шрифт GetFontWithScript()
{
PrintFont = PrintSettings.По умолчанию.PrintFont;
ВАР имя = PrintFont.Название;
размер ВАР = PrintFont.Размер;
стиль ВАР = PrintFont.Стиль;
var unit = PrintFont. Unit;
var charSet = PrintSettings.По умолчанию.GdiCharSet;

возврат нового шрифта(имя, размер, стиль, единица измерения, кодировка);
/*
* Шрифт (String, Single, FontStyle, GraphicsUnit, Byte)
* Инициализирует новый шрифт с использованием заданного размера, стиля, единицы измерения и набора символов.
*
*/
}

/ Кроме того, преобразовать цвет в строку и обратно так же просто.
// Где...
Система.Рисование.Color _yourColor; / / назначьте его из FontDialog или что-то еще...
// Затем...
строка colorString = _yourColor.ToArgb ().Метод toString();

// Затем просто преобразовать строку в цвет...
_yourColor = цвет.FromArgb (Конвертировать.ToInt32(colorString));

// или просто работайте с int или byte и забудьте о строке. ;-)


Richard MacCutchan

Пожалуйста,не пишите в старых вопросах. Этому уже больше 5 лет.

ZurdoDev

Если решение хорошее и еще не было предоставлено, почему бы и нет? Конечно, я не читал это решение, чтобы знать, хорошо оно или нет.

Richard MacCutchan

Тебе потребовалось достаточно много времени, чтобы найти его.

ZurdoDev

Ха! Я только сейчас это заметил.

Рейтинг:
0

AspDotNetDev

Кто-то создал FontConverter класс, который позволяет конвертировать шрифт в строку и из строки (класс шрифта сериализуем). Все очень просто... вы просто сериализовать и десериализовать из XML-строку. В этой статье есть еще один пример: .NET XML сериализация-класс настроек.