防止Winform最大化?

Ben*_*Sam 7 .net c# windows winforms

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

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

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

Cod*_*ray 13

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

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

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

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

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


dsg*_*fin 9

表单有一个名为MaximizeBox- 的属性设置为false.

关于你的第二个问题,请查看这个问题,以及在WinForms中实现键盘快捷键的最佳方法的答案.

  • MaximizeBox = false不会停止Windows +向上箭头快捷方式以最大化任何窗口。 (2认同)

小智 6

this.FormBorderStyle = FormBorderStyle.FixedSingle;
Run Code Online (Sandbox Code Playgroud)

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

除此之外,你隐藏/禁用最大化框,这应该做你所要求的.

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

this.MaximizeBox = false;
Run Code Online (Sandbox Code Playgroud)

要隐藏最大化框,也可以使用它

this.MinimizeBox = false;
Run Code Online (Sandbox Code Playgroud)

如果将"最大化"和"最小化"设置为false,则按钮将消失.