Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конвертирование Font в мой класс и обратно. Проблема с обратным конвертированием. 
:(
    Опции темы
CasperSC
Дата 15.3.2010, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Есть у меня класс, который мне надо сериализовать, в этом моём классе есть свойство Font из-за которого сериализация не работает, вот мне пришлось создать простенькую копию Font и конвертер:

Класс:
Код
    [Serializable]
    public class SFont
    {
        public Boolean bold; //является ли этот шрифт полужирным
        public Boolean underline; //подчёркнутый ли шрифт
        public Boolean gdiVerticalFont; /*     Возвращает логическое значение, указывающее на то, является ли данный шрифт
                                        System.Drawing.Font производным от вертикального шрифта GDI. */
        public Boolean isSystemFont; //Получает значение, показывающее, является ли шрифт элементом System.Drawing.SystemFonts.
        public Boolean italic; //возвращает значение будет ли этот шрифт курсивом
        public Boolean strikeout; /*  Значение true, если данный шрифт System.Drawing.Font обеспечивает горизонтальную
                               линию через шрифт, в противном случае возвращается значение false. */
        public String name; //возвращает имя начертания этого шрифта
        public String originalFontName; //Возвращает имя первоначально заданного шрифта
        public String systemFontName; /*     Имя системного шрифта, если свойство System.Drawing.Font.IsSystemFont равно
                                      true, в противном случае пустая строка (""). */
        public FontFamily fontFamily; //
        public byte gdiCharSet; /* Возвращает значение в байтах, задающее набор знаков GDI, который используется
                              данным шрифтом System.Drawing.Font. */
        public int height; //возвращает значение междустрочного интервала данного шрифта

        public float size; //Размер максимального пробела данного шрифта
        public float sizeInPoints; //Размер максимального пробела данного шрифта (в пунктах).

        public FontStyle Style;  //возвращает сведения о стиле данного шрифта

        public GraphicsUnit unit; /* Единица System.Drawing.GraphicsUnit представляет собой единицу измерения
                              для этого шрифта System.Drawing.Font. */



    }



Конвертер:
Код
    public static class Converter
    {
        public static SFont EncodeFontToSFont(Font font)
        {
            SFont sfont = new SFont();
            sfont.bold = font.Bold;
            sfont.gdiCharSet = font.GdiCharSet;
            sfont.gdiVerticalFont = font.GdiVerticalFont;
            sfont.height = font.Height;
            sfont.isSystemFont = font.IsSystemFont;
            sfont.italic = font.Italic;
            sfont.name = font.Name; ;
            sfont.originalFontName = font.OriginalFontName;
            sfont.size = font.Size;
            sfont.sizeInPoints = font.SizeInPoints;
            sfont.strikeout = font.Strikeout;
            sfont.Style = font.Style;
            sfont.systemFontName = font.SystemFontName;
            sfont.underline = font.Underline;
            sfont.unit = font.Unit;
            sfont.fontFamily = font.FontFamily;
            return sfont;
        }

        public static Font EncodeSFontToFont(SFont sfont, Font prototypeFont)
        {
            Font font = new Font(prototypeFont, FontStyle.Regular); //(sfont.fontFamily, sfont.unit, sfont.Style ,,,);
            font.Bold = sfont.bold;
            font.GdiCharSet = sfont.gdiCharSet;
            font.GdiVerticalFont = sfont.gdiVerticalFont;
            font.Height = sfont.height;
            font.IsSystemFont = sfont.isSystemFont;
            font.Italic = sfont.italic;
            font.Name = sfont.name; ;
            font.OriginalFontName = sfont.originalFontName;
            font.Size = sfont.size;
            font.SizeInPoints = sfont.sizeInPoints;
            font.Strikeout = sfont.strikeout;
            font.Style = sfont.Style;
            font.SystemFontName = sfont.systemFontName;
            font.Underline = sfont.underline;
            font.FontFamily = sfont.fontFamily;
            return font;
        }
    }



Вот второй метод в класса не работает Converter не работает, может как то в конструктор можно сразу передать параметры, чтобы ничего не терялось? Я просто в этом Font не особо разбираюсь и что-то не понятно как в конструкторе передать размер шрифта например.

Пример использования конвертера:
Код

...
textBoxMsg.Font = Converter.EncodeSFontToFont(alarm.FontMsg, textBoxMsg.Font);
...

PM MAIL   Вверх
CYBERDREAM
Дата 15.3.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I think, there4 I am
***


Профиль
Группа: Завсегдатай
Сообщений: 1096
Регистрация: 31.10.2006
Где: CyberLand

Репутация: 11
Всего: 28



что именно не работает? 


--------------------
Ищем .Net, Java, Javascript разработчиков, Кипр, Лимассол. (знание английского необязательно)
Telegram, skype: kuchuk.artiom
PM MAIL WWW   Вверх
CasperSC
Дата 15.3.2010, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 203
Регистрация: 27.11.2009

Репутация: нет
Всего: 1



Во втором методе свойства класса Font доступны только для чтения, я не могу им ничего присвоить и как понял мне вместо присваивания надо передавать параметры в конструктор, но какие точно я не пойму, чтобы из оригинального класса ничего не терялось. То есть 
font.FontFamily нелья присвоить sfont.fontFamily

Это сообщение отредактировал(а) CasperSC - 15.3.2010, 12:51
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0403 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.