关于 c#:Winform ClientSize 在 Maximize w/noborder 后超出屏幕尺寸

Winform ClientSize exceeds screen dimensions after Maximize w/ no border

我正在使用此代码在正常的 WindowState(具有相当大的边框样式)和最大化(具有无边框样式)之间切换。

1
2
3
4
5
6
7
8
9
10
if (WindowState != FormWindowState.Maximized)
{
    WindowState = FormWindowState.Maximized;
    FormBorderStyle = FormBorderStyle.None;
}
else
{
    WindowState = FormWindowState.Normal;
    FormBorderStyle = FormBorderStyle.Sizable;
}

更改后我也在动态调整表单上一些控件的布局。我发现 ClientSize.WidthClientSize.Height 值超过了最大化/无边框状态下的实际监视器分辨率(客户端大小:1936x1216,实际监视器分辨率:1920x1200)。这会导致某些控件超出范围。

是否有一种简单的方法可以确保表单不超过屏幕限制(除了手动检查屏幕大小并强制表单达到该大小)?


事实证明,通过颠倒最大化和边框样式更改操作的顺序可以解决。如果在最大化屏幕之前关闭边框,则表单 ClientSize 值将与监视器大小完全匹配。

工作代码:

1
2
3
4
5
if (WindowState != FormWindowState.Maximized)
{
    FormBorderStyle = FormBorderStyle.None;
    WindowState = FormWindowState.Maximized;
}