You are probably using font scaling to do a job it was not intended to do. It was designed to compensate for a different video DPI on the target machine. And yes, you can also use it to rescale your Form by changing the form's Font property. But then you'll run into trouble with controls that don't "inherit" their Parent's font. You have to update their Font property yourself.
Doing this automatically requires iterating the controls inside-out, updating only those that don't inherit their parent's font. This worked well:
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);
}
}
Sample usage:
private void Form1_Load(object sender, EventArgs e) {
ScaleFonts(this, 1.25f);
}
A possible failure-mode is triggering layout events while doing this, getting the layout messed up. That's hard to reason through, you may need to call Suspend/ResumeLayout() to fix this.