Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Конвертирование Font в мой класс и обратно.


Автор: CasperSC 15.3.2010, 12:28
Есть у меня класс, который мне надо сериализовать, в этом моём классе есть свойство 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);
...

Автор: CYBERDREAM 15.3.2010, 12:38
что именно не работает? 

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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)