如何有效地保留.Net字体对象?
时间:2020-03-06 14:34:37 来源:igfitidea点击:
用例:用户对设计图面上的对象进行字体自定义,我需要将其加载/保存到我的数据存储中。 IE。诸如粗体,斜体,大小,字体名称之类的设置需要保留。
是否有一些简单(可靠)的机制可以从字体对象的字符串表示形式进行转换/读回(在这种情况下,我只需要一个属性)?还是将多个属性与自定义逻辑结合在一起是正确的选择?
解决方案
使用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访问适当的转换器。很重要 :)
我们需要哪种类型的数据存储区来保留该数据存储区?如果仅仅是用户设置可以保存在文件中,则可以将字体对象序列化为二进制或者xml中的设置文件(如果我们希望能够直接编辑配置文件)。序列化名称空间(System.Xml.Serialization和System.Runtime.Serialization)提供了无需编写自定义代码即可完成此操作的所有工具。
MSDN网站XML序列化:.Net Framework中的XML序列化
[EDIT]因此,字体对象目前无法序列化。哎呀,对不起。
在我正在进行的项目中,我使用了多个属性。
我通过分解字体的名称,大小,样式和单位将字体保存到数据库表中,然后保留这些值。
一旦检索到这些值,便可以按需重新创建字体。