【发布时间】:2021-05-19 00:23:21
【问题描述】:
一个问题是asked here,但所提供的解决方案均不适用于 .NET 4.0 / Win7/8.1。答案围绕着不将 MaximizeBox 设置为 false 但以下 sn-p 显示它不起作用(即表单无论如何都覆盖了整个屏幕(在 Win7 和 8.1 上使用 ClassicShell 测试)。我需要这个跨多个屏幕和设置工作MaximumSize 不能很好地工作:当表单没有最大化时,应该允许用户的表单宽度跨越两个监视器。也没有 BeforeMaximize 事件可以挂钩。所以你不能简单地设置 @ 987654324@ 在OnMove 事件中。
public TestForm()
{
InitializeComponent();
FormBorderStyle = FormBorderStyle.None;
WindowState = FormWindowState.Maximized;
}
VS2013 似乎可以在不覆盖任务栏的情况下做到这一点。
编辑:设置 MaximizedBounds(由 Hans Passant 回答)在辅助屏幕大于主屏幕的辅助屏幕中不起作用。 (注意:以下是汉斯答案的修改版本,因为他在辅助屏幕中根本不起作用)
例如
protected override void OnLocationChanged(EventArgs e)
{
var workArea = Screen.FromControl(this).WorkingArea;
MaximizedBounds = new Rectangle(0, 0, workArea.Width, workArea.Height);
Debug.WriteLine(MaximizedBounds);
base.OnLocationChanged(e);
}
// Button click event (hit when form maximized):
WinApi.RECT rect;
WinApi.GetWindowRect(Handle, out rect);
Debug.WriteLine(rect);
输出:
OnLocationChanged: {X=0,Y=0,Width=1920,Height=1040}
ButtonClick when form is maximized: {Left=1366,Top=-216,Right=3840,Bottom=876}
结果是:
最大宽度 = 3840 - 1366 = 2474
最大高度 = 876 + 216 = 1092
框架从哪里得到这些数字?
【问题讨论】:
-
在您的上述代码中再添加一行,来自投票最高的答案。
MaximumSize = Screen.FromControl(this).WorkingArea.Size; -
编辑了问题以解释为什么
MaximumSize不适用于多显示器。 -
分配表单的 MaximizedBounds 属性。
-
辅助屏幕上的最大化边界不起作用。 .NET 框架错误??
-
将近两年后,我遇到了完全相同的问题。你有没有找到解决办法?