TypeConverter converter = TypeDescriptor.GetConverter(typeof(Font));
Font font = (Font)converter.ConvertFromString("[Font: Name=Arial, Size=48, Units=3, GdiCharSet=0, GdiVerticalFont=False]");
this.Font = font;
错误=> System.ArgumentException:'Value of'Mode = 48,Units = 3,GdiCharSet = 0,GdiVerticalFont = False]'对'units'无效。'
答案 0 :(得分:1)
此处的问题是您已使用Font.ToString()
方法生成FontConverter
不支持的字符串。
相反,您应该使用FontConverter
来生成字符串,然后您将返回一个如下所示的字符串:
Arial; 12pt; style=Bold
通过.ToString()
方法运行的同一字体对象给出:
[Font: Name=Arial, Size=12, Units=3, GdiCharSet=1, GdiVerticalFont=False]
对于您的特定字符串,您应该使用此字符串:
"Arial; 48pt"
答案 1 :(得分:0)
尝试以下方法:
TypeConverter converter = TypeDescriptor.GetConverter(typeof(Font));
Font font = (Font)converter.ConvertFromString("Arial, 48pt");
this.Font = font;
答案 2 :(得分:0)
微软没有充分记录这些内容。
但是,如果您查看reference source for FontConverter
,您会看到以下内容:
internal class UnitName {
internal string name;
internal GraphicsUnit unit;
internal static readonly UnitName[] names = new UnitName[] {
new UnitName("world", GraphicsUnit.World), // made up
new UnitName("display", GraphicsUnit.Display), // made up
new UnitName("px", GraphicsUnit.Pixel),
new UnitName("pt", GraphicsUnit.Point),
new UnitName("in", GraphicsUnit.Inch),
new UnitName("doc", GraphicsUnit.Document), // made up
new UnitName("mm", GraphicsUnit.Millimeter),
};
internal UnitName(string name, GraphicsUnit unit) {
this.name = name;
this.unit = unit;
}
}
所以看起来你应该将单位指定为以下之一:
world | display | px | pt | in | doc | mm
您需要将其中一个值后缀为大小值。源代码中的评论说:
text is expected to have a format like " 8,25pt