【问题标题】:C# AutoScaleMode Font, Bold controls don't scaleC# AutoScaleMode 字体,粗体控件不缩放
【发布时间】:2015-01-01 18:28:39
【问题描述】:

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

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

提前致谢

【问题讨论】:

    标签: c# fonts autoscalemode


    【解决方案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() 来解决这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 2011-09-23
      • 2017-01-20
      • 2012-02-23
      • 1970-01-01
      • 2011-02-27
      相关资源
      最近更新 更多