我想防止我的桌面应用程序被最大化。它不应该以任何方式最大化 - 通过双击标题栏,或通过单击键盘上的 Windows + 向上箭头等
-> 我禁用了MaximizeBox和MinimizeBox。
-> 我还为我的 WinForm
设置了MaximumSize和MinimumSize
当我按下Windows + 向上箭头时,我的 win 表单移动到屏幕的左上角,我的意思是它被最大化了。所以请告诉我有什么方法可以防止这种事情发生......
9 回答
这里实际上有两个完全不同的问题在起作用。诚然,从功能的角度来看,它们看起来基本相同,但从实现模型的角度来看(正如 Windows 本身自然会使用的那样),它们是不相关的。
MaximizeBox
正如其他人回答的那样,您可以通过将其属性设置为来防止表单最大化false
。这将删除窗体底层窗口上的WS_MAXIMIZEBOX
样式,从而阻止窗口管理器允许窗口最大化。它禁用窗口标题栏上的最大化框(最小化框和关闭框之间的那个),禁用窗口/系统菜单上的“最大化”选项,以及我可能忘记的任何其他最大化窗口的方法。
Win但是,这与+键盘快捷键无关↑,它调用Aero Snap就像将窗口拖动到位于屏幕边缘的神奇位置一样。窗口管理器,无论是由于错误还是 Aero Snap 的功能,仍然允许您有效地“最大化”不应最大化的窗口。设置MaximizeBox
属性不会影响这一点,所以如果你真的想阻止用户以这种方式改变窗口的大小,你需要禁用 Aero Snap 对窗口的影响。
不幸的是,没有任何方法(至少据我所知)以编程方式在每个窗口或每个进程的基础上禁用 Aero Snap(另请参阅此相关问题)。如果用户启用了 Aero Snap,您可以假设他们希望该行为和应用程序不应该篡改它。您唯一能做的就是完全禁用调整窗口大小。在 WinForms 中,您可以通过将FormBorderStyle
属性设置为下列之一来做到这一点:FormBorderStyle.FixedSingle
、FormBorderStyle.Fixed3D
或FormBorderStyle.FixedDialog
. 如果您仍希望以其他方式调整窗口大小,则需要编写代码来手动处理,这不是一件特别容易的事。
因此,我鼓励您非常仔细地考虑这是否真的有必要。所有其他不可最大化的窗口只需通过设置MaximizeBox
属性(或在其 UI 框架中执行等效操作)即可完成此操作,这意味着它们仍然可以通过 Aero Snap 有效地最大化。如果这适用于其他所有人的窗口,包括那些属于 Windows 本身的窗口,那么它可能对您有用。
该表单有一个名为MaximizeBox
- 将其设置为 false 的属性。
关于您的第二个问题,请查看此问题及其在 WinForms 中实现键盘快捷键的最佳方法的答案。
this.FormBorderStyle = FormBorderStyle.FixedSingle;
That line of code will prevent the user from re-sizing the Window.
In addition to that you hide/disable the maximize box and that should do what you asked.
To disable the maximize box use this
this.MaximizeBox = false;
To hide the maximize box use this as well
this.MinimizeBox = false;
If Maximize and Minimize are set to false the buttons disappear.
将 MaximumSize 设置为等于 Size(或某个大小)至少可以阻止窗口全屏显示。它仍然捕捉到左上角,但至少它仍然是一个窗口并且看起来正确 - 就像它是 Windows 而不是你的程序是愚蠢的。
您可以通过设置防止窗口对齐到左上角:
private void toolbox_Move(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Normal;
}
在表单的移动事件中。
表单类有一个名为“MaximumBox”的属性,您必须在表单的属性窗口中设置 False...这实际上将禁止以任何方式最大化表单...此外,如果您想控制您的表单您可以使用诸如“MinimumSize、MaximumSize”之类的属性来自行设置它们的值或为MaximumSizeChanged 和MinimumSizeChanged 事件创建事件处理程序...
如果您的窗口或应用程序已激活,您可以尝试 RegisterHotKey Win+Up,如果已停用,则取消注册此热键。您必须捕获热键并返回适当的值以防止进一步处理。
看WM_ACTIVATEAPP
,WM_ACTIVATE
和WM_NCACTIVATE
。如果您想为所有窗口禁用 Win+UP,则可以使用第一个。
将 formborderstyle 设置为 fixedsingle
Maximizebox=false
将maximumsize设置为winform默认大小的大小
例如:如果 size(646,385) 则设置 maximumsize(646,385)
您可以做的一件事是将MaximumSize 和MinimumSize 设置为相同的值,但不是0,0。