防止Winform被最大化?

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

– >我禁用MaximizeBoxMinimizeBox
– >我也为我的WinForm设置MaximumSizeMinimumSize

仍然当我按Windows +向上箭头,我的胜利forms转移到屏幕的左上angular,我的意思是它得到最大化。 所以请告诉我,以防止这种事情发生…

实际上这里有两个完全分开的问题。 当然,从功能的角度来看,它们基本上是一样的,但是从实现模型的角度来看(就像Windows自然使用的),它们是不相关的。

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

但是,这与Win + 键盘快捷键没有任何关系,它会调用Aero Snap ,就像将窗口拖动到坐在屏幕边缘的魔术位置一样。 窗口管理器,无论是作为Aero Snap的bug还是功能的结果,仍然允许您有效地“最大化”不应该被最大化的窗口。 设置MaximizeBox属性不会影响到这一点,所以如果你真的想阻止用户通过这种方式改变窗口大小,你需要在你的窗口中禁用Aero Snap的效果。

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

因此,我鼓励你们非常仔细地考虑这是否真的有必要。 所有其他不可最大化的窗口通过设置MaximizeBox属性(或在UI框架中执行相同操作)来完成此操作,这意味着它们仍然可以通过Aero Snap实现最大化。 如果这适用于其他人的窗口,包括Windows本身的一部分,那么它应该可能适合你。

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

至于你的第二个问题,看看这个问题,这是在WinForms中实现键盘快捷方式的最佳方法的答案 。

 this.FormBorderStyle = FormBorderStyle.FixedSingle; 

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

除此之外,你隐藏/禁用最大化框,应该做你所问。

要禁用最大化框使用这个

 this.MaximizeBox = false; 

要隐藏最大化的盒子,也要使用这个

 this.MinimizeBox = false; 

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

您可以通过设置来防止窗口贴紧到左上角:

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

在表单的移动事件中。

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

设置最大尺寸等于大小(或某种大小)至少停止窗口全屏。 它仍然捕捉到左上角,但它仍然是一个窗口,至少看起来是正确的 – 就像Windows是愚蠢的,而不是你的程序。

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

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