Winforms 字体向后不兼容

Winforms 字体向后不兼容,winforms,fonts,windows-xp,Winforms,Fonts,Windows Xp,我正在为我的winforms应用程序使用Segoe UI 在XP上,这种字体不存在,我想让我的应用程序改用Verdana 实现这一目标的最佳方式是什么。您想要的是: Font GetUIFont() { Font testFont = new Font("Segoe UI", 10f); if (testFont.Name == "Segoe UI") return testFont; else return new Font("Verda

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

在XP上,这种字体不存在,我想让我的应用程序改用Verdana


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

您想要的是:

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

从JasonH的解决方案开始,包括关于从形式派生的部分。如果无法自动继承窗体字体的控件出现问题,请在窗体具有所有控件时调用以下代码:

foreach (Control ctl in this.Controls)
{
    ctl.Font = GetUIFont();
}

最好使用默认(系统)字体来实现本机外观。所以Vista使用“Sergoe UI”作为默认字体,XP使用“Tahoma”作为默认字体(而不是“Verdana”)。要获取默认对话框字体,请使用SystemFonts类:

protected override void OnLoad(EventArgs e)
{
  base.OnLoad(e);
  Font = SystemFonts.DialogFont;
}

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