我想阻止我的桌面应用程序被最大化。 它不应该通过任何方式达到最大化 – 通过双击标题栏,或单击键盘上的Windows +向上箭头等。
– >我禁用MaximizeBox和MinimizeBox 。
– >我也为我的WinForm设置MaximumSize和MinimumSize
仍然当我按Windows +向上箭头,我的胜利forms转移到屏幕的左上angular,我的意思是它得到最大化。 所以请告诉我,以防止这种事情发生…
实际上这里有两个完全分开的问题。 当然,从功能的角度来看,它们基本上是一样的,但是从实现模型的角度来看(就像Windows自然使用的),它们是不相关的。
正如其他人所回答的,您可以通过将其MaximizeBox
属性设置为false
来防止您的表单被最大化。 这将删除窗体的底层窗口上的WS_MAXIMIZEBOX
样式 ,从而防止窗口管理器允许窗口最大化。 它禁用窗口标题栏(最小化框和关闭框之间的最大化框),禁用窗口/系统菜单上的“最大化”选项,以及任何其他最大化我可能已经忘记的窗口的方法。
但是,这与Win + ↑键盘快捷键没有任何关系,它会调用Aero Snap ,就像将窗口拖动到坐在屏幕边缘的魔术位置一样。 窗口管理器,无论是作为Aero Snap的bug还是功能的结果,仍然允许您有效地“最大化”不应该被最大化的窗口。 设置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;
该行代码将阻止用户重新调整窗口的大小。
除此之外,你隐藏/禁用最大化框,应该做你所问。
要禁用最大化框使用这个
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_ACTIVATEAPP
, WM_ACTIVATE
和WM_NCACTIVATE
。 如果您想禁用所有窗口的Win + UP,则可以使用第一个。