关于 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.Width 和 ClientSize.Height 值超过了最大化/无边框状态下的实际监视器分辨率(客户端大小:1936×1216,实际监视器分辨率:1920×1200)。这会导致某些控件超出范围。

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

  • 这完全正常,允许的最大窗口大小是显示器大小加上边框。这确保了当您最大化窗口时,您只能看到客户区而不是边框??。因此,当您删除边框时,您现在不可避免地会得到一个太大的客户区。只需删除此代码,没有必要。如果你想重叠用户任务栏,一个属于问题的细节,那么你必须处理 WM_GETMINMAXINFO 消息。
  • 感谢您的反馈。我对任务栏没有任何问题。我发现首先关闭边框会导致所需的行为。
  • 那么这段代码就没有意义了。请务必将其删除,更改 FormBorderStyle 可能会产生很多不良副作用。正如你所发现的。
  • 我不明白这段代码没有意义的评论。这部分代码是在特定条件下调用的方法中,并且正在执行我需要的操作(在正常、相当大的视图和全屏之间切换应用程序)。也许有更好的方法来做到这一点,但只是删除此代码会阻止应用程序正确响应。


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

工作代码:

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


来源:https://www.codenong.com/42276258/

微信公众号
手机浏览(小程序)

Warning: get_headers(): SSL operation failed with code 1. OpenSSL Error messages: error:14090086:SSL routines:ssl3_get_server_certificate:certificate verify failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(): Failed to enable crypto in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57

Warning: get_headers(https://static.shanhubei.com/qrcode/qrcode_viewid_9064.jpg): failed to open stream: operation failed in /mydata/web/wwwshanhubei/web/wp-content/themes/shanhuke/single.php on line 57
0
分享到:
没有账号? 忘记密码?