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

时间:2011-04-21 18:36:23

标签: c# winforms windows-7 fonts dialog

我正在使用VS C#2008 Express。

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

在测试期间,我注意到某些字体没有完全初始化对话框 - 名称没有出现在“字体”框中,样本为空白。

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

我是否在代码中初始化对话框的字体或者如果我将FontDialog控件的属性设置为IDE中的上述问题字体之一,我也看到同样的问题。

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

有什么方法可以解决这个问题吗?

添加信息: 此问题出现在Windows 7 64位系统上。在Vista和XP上,Arial Black和Arial Narrow被列为单独的字体,而不仅仅是具有黑色和窄样式的Arial。因此,似乎微软正在使用Win7中的常见字体对话框做一些不同的事情。

1 个答案:

答案 0 :(得分:3)

我可以确认这种行为,你应该等一下,看看有人提供了一个明确的解释,说明为什么这是正确的,如果没人提供,请通过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");
    }
}

使用F4添加对System.Drawing和System.Windows.Forms的引用,并在Font和FontDialog上按 Ctrl + 添加所需的使用条款

然后观察:

  1. 第一次出现时没有选择Arial Black
  2. 如果您在第一次选择Arial,然后在字体样式选择器中选择Black,请单击“确定”,对话框将恢复,不会选择任何字体。
  3. 字体的3个转储之间唯一不同的是(如果你选择Arial,Black,16次),那么在对话框之后(15.75pt对16pt),大小略有偏差。此外,对话框后OriginalFontName保留为null。但是,字体名称是相同的,“Arial Black”。
  4. 我觉得这是一个错误的原因是,如果同一个对话框弹出两次,第二次显示第一次选择值的结果,它应该显示相同的信息。