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