10

我想防止我的桌面应用程序被最大化。它不应该以任何方式最大化 - 通过双击标题栏,或通过单击键盘上的 Windows + 向上箭头等

-> 我禁用了MaximizeBoxMinimizeBox
-> 我还为我的 WinForm 设置了MaximumSizeMinimumSize

当我按下Windows + 向上箭头时,我的 win 表单移动到屏幕的左上角,我的意思是它被最大化了。所以请告诉我有什么方法可以防止这种事情发生......

4

9 回答 9

14

这里实际上有两个完全不同的问题在起作用。诚然,从功能的角度来看,它们看起来基本相同,但从实现模型的角度来看(正如 Windows 本身自然会使用的那样),它们是不相关的。

MaximizeBox正如其他人回答的那样,您可以通过将其属性设置为来防止表单最大化false。这将删除窗体底层窗口上的WS_MAXIMIZEBOX样式,从而阻止窗口管理器允许窗口最大化。它禁用窗口标题栏上的最大化框(最小化框和关闭框之间的那个),禁用窗口/系统菜单上的“最大化”选项,以及我可能忘记的任何其他最大化窗口的方法。

Win但是,这与+键盘快捷键无关,它调用Aero Snap就像将窗口拖动到位于屏幕边缘的神奇位置一样。窗口管理器,无论是由于错误还是 Aero Snap 的功能,仍然允许您有效地“最大化”不应最大化的窗口。设置MaximizeBox属性不会影响这一点,所以如果你真的想阻止用户以这种方式改变窗口的大小,你需要禁用 Aero Snap 对窗口的影响。

不幸的是,没有任何方法(至少据我所知)以编程方式在每个窗口或每个进程的基础上禁用 Aero Snap(另请参阅此相关问题)。如果用户启用了 Aero Snap,您可以假设他们希望该行为和应用程序不应该篡改它。您唯一能做的就是完全禁用调整窗口大小。在 WinForms 中,您可以通过将FormBorderStyle属性设置为下列之一来做到这一点:FormBorderStyle.FixedSingleFormBorderStyle.Fixed3DFormBorderStyle.FixedDialog. 如果您仍希望以其他方式调整窗口大小,则需要编写代码来手动处理,这不是一件特别容易的事。

因此,我鼓励您非常仔细地考虑这是否真的有必要。所有其他不可最大化的窗口只需通过设置MaximizeBox属性(或在其 UI 框架中执行等效操作)即可完成此操作,这意味着它们仍然可以通过 Aero Snap 有效地最大化。如果这适用于其他所有人的窗口,包括那些属于 Windows 本身的窗口,那么它可能对您有用。

于 2013-03-24T11:54:30.110 回答
10

该表单有一个名为MaximizeBox- 将其设置为 false 的属性。

关于您的第二个问题,请查看此问题及其在 WinForms 中实现键盘快捷键的最佳方法的答案。

于 2012-11-14T14:51:43.833 回答
6
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.

于 2012-11-14T15:55:20.773 回答
2

将 MaximumSize 设置为等于 Size(或某个大小)至少可以阻止窗口全屏显示。它仍然捕捉到左上角,但至少它仍然是一个窗口并且看起来正确 - 就像它是 Windows 而不是你的程序是愚蠢的。

于 2014-04-10T03:42:47.600 回答
2

您可以通过设置防止窗口对齐到左上角:

private void toolbox_Move(object sender, EventArgs e)
{
    this.WindowState = FormWindowState.Normal;
}

在表单的移动事件中。

于 2015-03-23T16:59:26.503 回答
1

表单类有一个名为“MaximumBox”的属性,您必须在表单的属性窗口中设置 False...这实际上将禁止以任何方式最大化表单...此外,如果您想控制您的表单您可以使用诸如“MinimumSize、MaximumSize”之类的属性来自行设置它们的值或为MaximumSizeChanged 和MinimumSizeChanged 事件创建事件处理程序...

于 2012-11-14T15:06:06.867 回答
1

如果您的窗口或应用程序已激活,您可以尝试 RegisterHotKey Win+Up,如果已停用,则取消注册此热键。您必须捕获热键并返回适当的值以防止进一步处理。

WM_ACTIVATEAPPWM_ACTIVATEWM_NCACTIVATE。如果您想为所有窗口禁用 Win+UP,则可以使用第一个。

于 2015-06-26T14:58:58.333 回答
1

将 formborderstyle 设置为 fixedsingle

Maximizebox=false

将maximumsize设置为winform默认大小的大小

例如:如果 size(646,385) 则设置 maximumsize(646,385)

于 2020-01-08T04:35:06.023 回答
0

您可以做的一件事是将MaximumSize 和MinimumSize 设置为相同的值,但不是0,0。

于 2019-02-01T02:00:30.743 回答