C#WinFontDialog可以';不能用一些字体初始化吗?

C#WinFontDialog可以';不能用一些字体初始化吗?,c#,winforms,windows-7,fonts,dialog,C#,Winforms,Windows 7,Fonts,Dialog,我使用的是VS C#2008 Express 我正在使用标准FontDialog控件向我的应用程序添加存储和检索用户字体选择的功能 在测试过程中,我注意到某些字体不能完全初始化对话框——名称不会出现在“字体”框中,示例为空 这些字体中,名称的一部分出现在对话框的“字体样式”列表中:“Arial Black”、“Segoe UI Light”、“Segoe UI Semibold”等(不过,有趣的是,“Arial Strown”确实按预期工作) 无论是在代码中初始化对话框的字体,还是在IDE中将F

我使用的是VS C#2008 Express

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

在测试过程中,我注意到某些字体不能完全初始化对话框——名称不会出现在“字体”框中,示例为空

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

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

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

有办法解决这个问题吗

补充资料:
此问题在Windows 7 64位系统上表现出来。在Vista和XP上,Arial Black和Arial Strong作为单独的字体列出,而不仅仅是带有黑色和狭窄样式的Arial。因此,看起来微软在Win7中的通用字体对话框上做了一些不同的事情。

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

下面是如何重现问题,使用并执行以下程序:

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的引用,然后按Ctrl+。在Font和FontDialog上添加所需的using子句

然后观察:

  • Arial黑色不是第一次显示时选择的
  • 如果您在第一次选择Arial,然后在字体样式选择器中选择黑色,请单击“确定”,对话框将返回,但未选择任何字体
  • 字体的3个转储之间唯一不同的地方(假设您两次都选择了Arial、Black和16)是对话框后的大小略有不同(15.75pt和16pt)。此外,对话框后面的
    原始名称
    保留为
    null
    。但是,字体名称是相同的,“Arial Black”

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

    您可以在这里看到问题的图像:我在搜索中很少发现提到这个问题,但我确实发现这个对话框提供了一些见解(但没有解决方案):我用Delphi应用程序重现了这个问题,因此这显然是Windows 7常见字体对话框问题。我提交了一份Microsoft Connect的错误报告。如果有任何问题,我会在这里报告。谢谢你的确认,拉西。我还注意到令人费解的0.25磅字体大小差异。