如何有效地保留.Net字体对象?

时间:2008-09-23 01:55:39

标签: .net serialization fonts

用例:用户对设计图面上的对象进行字体自定义,我需要加载/保存到我的数据存储区。即像Bold,Italics,Size,Font Name这样的设置需要保留。

是否有一些简单(可靠)的机制来从字体对象的字符串表示转换/读回(在这种情况下,我只需要一个属性)?或者是多个属性与自定义逻辑相结合的正确选项?

3 个答案:

答案 0 :(得分:10)

使用TypeConverter

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访问适当的转换器。非常重要:)

答案 1 :(得分:0)

您需要使用哪种类型的数据存储来保留它?如果只是用户设置可以保存在文件中,您可以将字体对象序列化为二进制或xml中的设置文件(如果您希望能够直接编辑配置文件)。序列化命名空间(System.Xml.Serialization和System.Runtime.Serialization)提供了所有工具,无需编写自定义代码。

关于XML序列化的MSDN站点:XML Serialization in the .Net Framework

[编辑]因此,字体对象不是可序列化的。哎呀:(对不起。

答案 2 :(得分:0)

在我正在进行的项目中,我选择了多个属性。

我通过打破它的名称,大小,样式和单位将字体保存到数据库表中,然后保留这些值。

重新审核这些值后,按需重新创建字体非常容易。