用例:用户对设计表面上的对象进行字体自定义,我需要将其加载/保存到我的数据存储区。即粗体、斜体、大小、字体名称等设置需要保留。
是否有一些简单(可靠)的机制可以从字体对象的字符串表示形式转换/读回(在这种情况下,我只需要一个属性)?还是多个属性与自定义逻辑相结合是正确的选择?
用例:用户对设计表面上的对象进行字体自定义,我需要将其加载/保存到我的数据存储区。即粗体、斜体、大小、字体名称等设置需要保留。
是否有一些简单(可靠)的机制可以从字体对象的字符串表示形式转换/读回(在这种情况下,我只需要一个属性)?还是多个属性与自定义逻辑相结合是正确的选择?
使用类型转换器:
Font font = new Font("Arial", 12, GraphicsUnit.Pixel);
TypeConverter converter = TypeDescriptor.GetConverter(typeof (Font));
string fontStr = converter.ConvertToInvariantString(font);
Font font2 = (Font) converter.ConvertFromString(fontStr);
Console.WriteLine(font.Name == font2.Name); // prints True
如果您想使用 XML 序列化,您可以创建 Font 类包装器,它将存储 Font 属性的某些子集。
注意(Gishu) - 永远不要直接访问类型转换器。相反,请使用 TypeDescriptor 访问相应的转换器。很重要 :)
您需要将其保存在哪种类型的数据存储中?如果只是可以保存在文件中的用户设置,则可以将字体对象序列化为二进制或 xml 格式的设置文件(如果您希望能够直接编辑配置文件)。序列化命名空间(System.Xml.Serialization 和 System.Runtime.Serialization)提供了执行此操作的所有工具,而无需编写自定义代码。
关于 XML 序列化的 MSDN 站点:.Net 框架中的 XML 序列化
[编辑]所以显然字体对象是不可序列化的。哎呀,对不起。
在我正在进行的项目中,我使用了多个属性。
我通过分解字体的名称、大小、样式和单位将字体保存到数据库表中,然后保留这些值。
检索这些值后,按需重新创建字体是一件轻而易举的事。