无法在C#中将字符串转换为字体

时间:2017-09-11 06:13:41

标签: c#

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'无效。'

3 个答案:

答案 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