字体向后不兼容

Posted

技术标签:

【中文标题】字体向后不兼容【英文标题】:Font backward incompatibility 【发布时间】:2010-11-03 06:17:46 【问题描述】:

我正在为我的 winforms 应用程序使用 Segoe UI。

在 XP 上,这种字体不存在,我想让我的应用使用 Verdana。

实现这一目标的最佳方法是什么。

【问题讨论】:

【参考方案1】:

你想要的是这样的:

Font GetUIFont()

    Font testFont = new Font("Segoe UI", 10f);
    if (testFont.Name == "Segoe UI")
        return testFont;
    else
        return new Font("Verdana", 10f);

【讨论】:

...但是您如何为应用程序中的每个表单和控件自动执行此操作?你如何确保布局仍然正确?等等等等。 你可以做的是从 Form 派生,然后使用你的派生类。在派生表单的构造函数中,您可以调用 GetUIFont 方法来设置表单的字体,然后将其自动设置。至于布局,当我更改字体大小时,我总是看到我的表单会自动调整。你可能不得不玩弄那个,如果你有问题,你可以随时在这里寻求帮助。 ;)【参考方案2】:

从 JasonH 的解决方案开始,包括从 Form 派生的部分。如果您对不自动继承表单字体的控件有问题,请在您的表单具有所有控件时调用此代码:

foreach (Control ctl in this.Controls)

    ctl.Font = GetUIFont();

【讨论】:

【参考方案3】:

最好使用默认(系统)字体来获得原生外观。因此,Vista 使用“Sergoe UI”作为默认字体,而 XP 使用“Tahoma”(不是“Verdana”)。要获取默认对话框字体,请使用 SystemFonts 类:

protected override void OnLoad(EventArgs e)

  base.OnLoad(e);
  Font = SystemFonts.DialogFont;

【讨论】:

以上是关于字体向后不兼容的主要内容,如果未能解决你的问题,请参考以下文章

automake 1.12 更改 bison/yacc 输出名称,向后不兼容的更改?

从GWT 2.7更新到2.8.1后不兼容的RemoteServiceException

Android targetSdk向后兼容

pyuic5 向后兼容性

如何在不破坏向后兼容性的情况下更改 DataContract 属性的类型?

Postgres-XL 向后兼容 PostgreSQL?