C#AutoScaleMode字体,粗体控件不缩放

时间:2014-11-05 14:12:46

标签: c# fonts autoscalemode

我正在开发一个小应用程序。我尝试使用AutoScaleMode = Font并且它的功能就像我的所有意图,除了一个,我希望一些特定的控件有粗体文字,但是,当字体大小时,它们不会自动缩放改变了。

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

提前致谢

1 个答案:

答案 0 :(得分:1)

你可能正在使用字体缩放来完成一项不打算做的工作。它旨在补偿目标计算机上的不同视频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 / ResumeLayout()来解决这个问题。