C#AutoScaleMode字体,粗体控件不';t标度

本文关键字:标度 控件 字体 C#AutoScaleMode | 更新日期: 2023-09-27 18:29:18

我正在开发一个小型应用程序。我正在尝试使用AutoScaleMode = Font,它对我的所有意图都很有吸引力,除了一个,我希望一些特定的控件有粗体文本,但当字体大小改变时,它们不会自动缩放。

是否可以更改控件的默认字体,但仍将AutoScale作为其他控件?

提前感谢

C#AutoScaleMode字体,粗体控件不';t标度

您可能正在使用字体缩放来完成原本不打算完成的工作。它的设计目的是补偿目标机器上不同的视频DPI。是的,您也可以通过更改表单的Font属性来使用它来重新缩放表单。但是,如果控件没有"继承"其父字体,则会遇到问题。您必须自己更新他们的Font属性。

自动执行此操作需要从内到外迭代控件,只更新那些没有继承其父字体的控件。效果很好:

    public static void ScaleFonts(Control ctl, float multiplier) {
        foreach (Control c in ctl.Controls) ScaleFonts(c, multiplier);
        if (ctl.Parent == null || ctl.Parent.Font != ctl.Font) {
            ctl.Font = new Font(ctl.Font.FontFamily, 
                                ctl.Font.Size * multiplier, ctl.Font.Style);
        }
    }

示例用法:

    private void Form1_Load(object sender, EventArgs e) {
        ScaleFonts(this, 1.25f);
    }

一种可能的失败模式是在执行此操作时触发布局事件,导致布局混乱。这很难解释,您可能需要调用Suspend/ResumeeLayout()来解决此问题。