防止Winform最大化?

时间:2012-11-14 14:49:41

标签: c# .net windows winforms

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

- >我禁用 MaximizeBox MinimizeBox
- >我还为我的WinForm设置了 MaximumSize MinimumSize

当我按下 Windows + Up 箭头时,我的胜利形式转移到屏幕的左上角,我的意思是它最大化了。 所以请告诉我任何方法来防止这件事发生......

9 个答案:

答案 0 :(得分:13)

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

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

然而,这与 Win + 键盘快捷方式无关,后者调用Aero Snap与将窗口拖动到魔法相同位置坐在屏幕的边缘。窗口管理器,无论是由于错误还是Aero Snap的功能,仍然允许您有效地“最大化”不应最大化的窗口。设置MaximizeBox属性不会影响这一点,因此如果您确实希望阻止用户以这种方式更改窗口大小,则需要在窗口上禁用Aero Snap的效果。

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

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

答案 1 :(得分:9)

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

关于第二个问题,请查看this question and it's answers以了解在WinForms中实现键盘快捷键的最佳方法。

答案 2 :(得分:5)

this.FormBorderStyle = FormBorderStyle.FixedSingle;

该行代码将阻止用户重新调整Window的大小。

除此之外,你隐藏/禁用最大化框,并且应该按照你的要求进行操作。

要禁用最大化框,请使用此

this.MaximizeBox = false;

要隐藏最大化框,请使用此选项

this.MinimizeBox = false;

如果将“最大化”和“最小化”设置为false,则按钮将消失。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

您可以通过设置:

来阻止窗口捕捉到左上角
private void toolbox_Move(object sender, EventArgs e)
{
    this.WindowState = FormWindowState.Normal;
}

在表单的移动事件中。

答案 5 :(得分:1)

Form类的一个名为“MaximumBox”的属性你必须在表单的属性窗口中设置False ...这实际上会禁止表单以任何方式最大化...另外如果你想要控制您的表单大小,您可以使用“MinimumSize,MaximumSize”等属性自行设置其值或为MaximumSizeChanged和MinimumSizeChanged事件创建事件处理程序...

答案 6 :(得分:1)

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

查看WM_ACTIVATEAPPWM_ACTIVATEWM_NCACTIVATE。如果要为所有窗口禁用Win + UP,可以使用第一个。

答案 7 :(得分:1)

将formborderstyle设置为fixsingle

Maximizebox=false

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

例如:如果大小为(646,385),则设置最大值为(646,385)

答案 8 :(得分:0)

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