C# WinForms FontDialog 不能用某些字体初始化?

标签 c# winforms windows-7 fonts dialog

我正在使用 VS C# 2008 Express。

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

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

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

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

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

有什么办法可以解决吗?

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

最佳答案

我可以确认这种行为,你应该等着看是否有人对为什么这是正确的给出了明确的解释,如果没有人提供,请通过 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”。

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

关于C# WinForms FontDialog 不能用某些字体初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5748329/

相关文章:

c# - 如何将 EntityResolver 与 Azure 存储结合使用?

c# - 关于.Net继承的问题

c# - 为什么我的窗口没有从我的线程更新?

c# - 为行着色,添加文本

c - 无法从 Ubuntu VM 交叉编译 C 程序以兼容 Windows 主机

c++ - 分层窗口中的 OpenGL 立体

java - 在 Windows 7 中尝试 Hadoop 2.5.1 WordCount 教程时出现 UnsatisfiedLinkError

javascript - 从 iPad 创建 Canvas 图像

c# - 如何拆分多个级别的成员访问权限

c# - 形成 KeyUp 和 KeyDown 事件来改变变量