Страница: 1 |
Страница: 1 |
Вопрос: Работа со шрифтами
Добавлено: 16.09.04 06:27
Автор вопроса: Terminator | Web-сайт:
Хочу при выходе из программы сохранять настройки шрифта RichTextBox'а в текстовом файле, чтобы при загрузке импортировать его вновь. Сохранить шрифт получается, с этим проблем нет (с помощью font.ToString). А как при загрузке из файла преобразовать текст String в System.Drwing.Font? Как раз простой обратной операции и нет.
Ответы
Всего ответов: 5
Номер ответа: 1
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #1
Добавлено: 16.09.04 11:57
а может можна сериалезировать шрифт, а при загрузке программы
десереализировать...?
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 16.09.04 12:27
f = New Font ("Times New Roman", 12)
Номер ответа: 3
Автор ответа:
Terminator
ICQ: 170087310
Вопросов: 12
Ответов: 6
Web-сайт:
Профиль | | #3
Добавлено: 20.09.04 02:01
Все это понятно. Только проблема в другом: когда я сохраняю в текстовом файле f.ToString, в этом файле записывается что-то вроде
[Font: Name=Arial, Size=12, Units=3, GdiCharSet=204, GdiVerticalFont=False]
Как все это импортировать обратно в переменную, чтобы имя шрифта был Arial, размер - 12 и т.д.?
Вообще, если бы у Билла Гейтса были мозги, он бы сделал свойства f.Name, f.Size и т.д не только read-only. Тогда было бы намного проще.
Номер ответа: 4
Автор ответа:
Артём Л.
ICQ: 280044491
Вопросов: 43
Ответов: 227
Профиль | | #4
Добавлено: 20.09.04 12:23
на самом деле дядя Билли тут совсем непричем...
ToString() - используется для строкового представления объекта и совсем не
служит для формирования данных для десереализации...но даже из того что
делает метод ToString() для фонта можна вполне вытащтить всю информацию для
создания объекта шрифта...Достаточно воспользоваться регулярными
выражениями..
типа этого
Const str$ = "[Font: Name=Arial, Size=12, Units=3, GdiCharSet=204,
GdiVerticalFont=False]"
Dim reg$ = "Font: Name=(?<name>[a-zA-Z]+), Size=(?<size>\d+), "
Dim regExp As New System.Text.RegularExpressions.Regex(reg)
Dim m As System.Text.RegularExpressions.Match = regExp.Match(str)
MsgBox(String.Format("Font={0},Size={1}", New String()
{m.Groups("name").Value, m.Groups("size").Value}))
Номер ответа: 5
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #5
Добавлено: 21.09.04 17:01
Шрифты прекрасно сериализируются/десериализируются - проверено на
личном опыте.