使用.net框架类库中的自定义字体

时间:2018-10-19 17:57:13

标签: c# winforms fonts

我想使用从类库中加载的自定义字体,因此我将字体文件放在类库的Resource文件夹中。

我有这种方法来获取字体:

private static FontFamily GetFontFromFile(MyFontWeightEnum style)
{
      var fontList = new PrivateFontCollection();
      fontList.AddFontFile(@"Resources\Roboto-Black.ttf");
      fontList.AddFontFile(@"Resources\Roboto-Bold.ttf");
      fontList.AddFontFile(@"Resources\Roboto-Italic.ttf");
      fontList.AddFontFile(@"Resources\Roboto-Light.ttf");
      fontList.AddFontFile(@"Resources\Roboto-Medium.ttf");
      fontList.AddFontFile(@"Resources\Roboto-Regular.ttf");
      fontList.AddFontFile(@"Resources\Roboto-Thin.ttf");

      switch (style)
      {
            case MyFontWeightEnum.Black:
                    return fontList.Families[0];
            case MyFontWeightEnum.Bold:
                    return fontList.Families[1];
            case MyFontWeightEnum.Light:
                    return fontList.Families[2];
            case MyFontWeightEnum.Medium:
                    return fontList.Families[3];
            case MyFontWeightEnum.Regular:
                    return fontList.Families[4];
            case MyFontWeightEnum.Italic:
                    return fontList.Families[5];
            case MyFontWeightEnum.Thin:
            default:
                    return fontList.Families[6];
      }
}

并且我在公共方法中使用它来返回这样的Font:

public static Font GetRobotoFont(MyFontWeightEnum style, MyFontSizeEnum fontSize)
{
    return new Font(GetFontFromFile(style), fontSize.ToFloat());
}

所以这两个方法都存在于类库中,因此我将类库引用到Winforms项目中,并在标签上使用该方法:

label1.Font = MyCustomFonts.GetRobotoFont(MyFontWeightEnum.Thin, MyFontSizeEnum.Size18);

当我运行应用程序时,我得到:System.IO.FileNotFoundException:'找不到文件'。

所以我将字体文件放在桌面文件夹中,并给出了路径,它可以正常工作而没有任何问题。

我在stackoverflow中寻找了类似的问题,我发现了我尝试过的内存方法,但是它无法正常工作,无法正确加载字体,

所以这里的结论是,在创建程序集时,资源文件夹中的所有文件都将转换为byte [],这就是为什么我得到的文件不存在异常的原因。

那么有没有人可以解释这个问题并帮助解决它。

0 个答案:

没有答案