Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#如何在代码中定义字体回退序列_C#_Winforms_Fonts - Fatal编程技术网

C#如何在代码中定义字体回退序列

C#如何在代码中定义字体回退序列,c#,winforms,fonts,C#,Winforms,Fonts,我尝试在代码中定义字体回退序列,参见 但我有一个错误:“附加信息:找不到字体‘Comic Sans MS,Verdana’。” 如何在代码中定义字体回退序列。因为“Comic Sans MS,Verdana”不是字体名称。您可以定义一个字体名称数组。您还可以向该数组添加名称 string[] fontName = new string[] { "Comic Sans MS", "Verdana" }; FontFamily f = new FontFamily(fontName[0]); 我认

我尝试在代码中定义字体回退序列,参见

但我有一个错误:“附加信息:找不到字体‘Comic Sans MS,Verdana’。”

如何在代码中定义字体回退序列。

因为“Comic Sans MS,Verdana”不是字体名称。您可以定义一个字体名称数组。您还可以向该数组添加名称

string[] fontName = new string[] { "Comic Sans MS", "Verdana" };
FontFamily f = new FontFamily(fontName[0]);

我认为FontFamily不适用于该任务,而且我担心Windows窗体没有自动回退字体。 请注意,此示例适用于PresentationCore Assembly中的System.Windows.Media,而不是System.Drawing.FontFamily中的。 在尝试分配给Form.Font之前,必须尝试手动加载字体,然后检查Name属性

您可以尝试以下方法:

Font font = null;
string[] fontNames = {"Comic Sans MS","Verdana"};
foreach (var fontName in fontNames)
{
    font = new Font(fontName, 12.0f);
    if (font.Name == fontName) break;
}
this.Font = font;

您正在使用WinForms,但正在查看WPF文档。构造函数不支持显式回退字体。只能为
FontFamily
构造函数指定一个字体的面名称。如果找不到指定的字体,操作系统会根据(本文非常陈旧,因此其中一些细节已经更改,但其中许多都是相同的)自动选择回退

通常,WinForms应用程序不应硬编码特定字体。您希望在UI中使用的是标准的系统对话框字体,您可以使用该字体获得。在每个窗体的构造函数中设置它,以便所有子控件按照建议自动拾取它。这不仅确保字体可用,而且允许用户界面适应用户的偏好

如果必须对字体进行硬编码,则需要使用手动回退算法查看枚举列表中是否存在所需的字体,如果不存在,则回退到其他字体。注意,“Comic Sans MS”和“Verdana”都是“安全”字体;除非用户明确删除了它们,否则它们将出现在.NET Framework可以运行的任何Windows系统上。(他们可能有。喜剧演员是令人憎恶的。)


也许更好的选择(同样,如果您必须使用自定义的非标准字体)是将您需要的字体与应用程序捆绑在一起。您可以通过维护专门用于应用程序的字体来实现这一点。私有字体集合可以包括应用程序供应商提供的字体文件,但这些文件未安装在系统上。

否,我希望此字体作为备用字体。如果字符不能通过字体“Comic Sans MS”显示,则自动使用“Verdana”显示字符。
Font font = null;
string[] fontNames = {"Comic Sans MS","Verdana"};
foreach (var fontName in fontNames)
{
    font = new Font(fontName, 12.0f);
    if (font.Name == fontName) break;
}
this.Font = font;