C#AutoScaleMode字体,粗体控件不';t标度
本文关键字:标度 控件 字体 C#AutoScaleMode | 更新日期: 2023-09-27 18:29:18
我正在开发一个小型应用程序。我正在尝试使用AutoScaleMode = Font
,它对我的所有意图都很有吸引力,除了一个,我希望一些特定的控件有粗体文本,但当字体大小改变时,它们不会自动缩放。
是否可以更改控件的默认字体,但仍将AutoScale
作为其他控件?
提前感谢
您可能正在使用字体缩放来完成原本不打算完成的工作。它的设计目的是补偿目标机器上不同的视频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()来解决此问题。