C# WinForms FontDialog 无法用某些字体初始化?

Jef*_*f H 6 c# fonts dialog windows-7 winforms

我正在使用 VS C# 2008 Express。

我正在使用标准 FontDialog 控件向我的应用程序添加存储和检索用户字体选择的功能。

在我的测试过程中,我注意到某些字体没有完全初始化对话框——名称没有出现在“字体”框中,并且示例是空白的。

这些字体的名称的一部分出现在对话框的“字体样式”列表中:“Arial Black”、“Segoe UI Light”、“Segoe UI Semibold”等(尽管有趣的是,“Arial Narrow”确实如此)按预期工作。)

无论是在代码中初始化对话框的字体,还是将 FontDialog 控件的属性设置为 IDE 中的上述问题字体之一,我都会遇到同样的问题。

只需创建一个简单的表单,添加一个由按钮启动的 FontDialog 控件,并将其字体属性设置为“Arial Black”并将大小设置为 16,即可轻松重现。

有办法解决这个问题吗?

补充信息:此问题出现在 Windows 7 64 位系统上。在 Vista 和 XP 上,Arial Black 和 Arial Narrow 被列为单独的字体,而不仅仅是带有 Black 和 Narrow 样式的 Arial。看来微软正在对Win7中的通用字体对话框做一些不同的事情。

ang*_*son 4

我可以确认这种行为,您应该等待,看看是否有人提供了为什么这是正确的明确解释,如果没有人提供,请通过Microsoft Connect报告。

以下是重现问题的方法,使用LINQPad并执行以下程序:

void Main()
{
    using (var dlg = new FontDialog())
    {
        dlg.Font = new Font("Arial Black", 16);
        dlg.Font.Dump("before");
        dlg.ShowDialog();
        dlg.Font.Dump("between");
        dlg.ShowDialog();
        dlg.Font.Dump("after");
    }
}
Run Code Online (Sandbox Code Playgroud)

使用 F4 添加对 System.Drawing 和 System.Windows.Forms 的引用,然后在 Font 和 FontDialog 上按Ctrl+.添加所需的 using 子句

然后观察:

  1. Arial Black 首次显示时未选择
  2. 如果您第一次选择 Arial,然后在字体样式选择器中选择 Black,单击“确定”,对话框将重新出现,且未选择任何字体。
  3. 3 次字体转储之间唯一的区别(假设您两次都选择了 Arial、Black、16)是对话框后的大小略有偏差(15.75pt 与 16pt)。此外,对话框后的内容OriginalFontName仍然保留。null然而,字体名称是相同的,“Arial Black”。

我觉得这是一个错误的原因是,如果同一个对话框弹出两次,第二次显示第一次选择值的结果,它应该显示相同的信息。