我想阻止我的桌面应用程序被最大化。它不应以任何方式最大化 - 通过双击标题栏,或单击键盘上的 Windows + 向上箭头等。
-> 我禁用了 MaximizeBox 和 MinimizeBox。
-> 我还为我的 WinForm 设置了 MaximumSize 和 MinimumSize
仍然当我按下 Windows + 向上 箭头时,我的胜利形式转移到屏幕的左上角,我的意思是它被最大化了。
所以请告诉我任何防止这件事发生的方法......
最佳答案
这里实际上有两个完全不同的问题在起作用。诚然,从功能的角度来看,它们看起来基本相同,但从实现模型的角度(正如 Windows 本身自然会使用的那样)来看,它们是不相关的。
正如其他人所回答的那样,您可以通过设置 MaximizeBox
来防止表单最大化。属性为 false
。这将删除 WS_MAXIMIZEBOX
style在窗体的底层窗口上,这会阻止窗口管理器允许窗口最大化。它禁用窗口标题栏上的最大化框(最小化框和关闭框之间的那个),禁用窗口/系统菜单上的“最大化”选项,以及我可能忘记的任何其他最大化窗口的方法。
但是,这与调用 Aero Snap 的 Win+↑ 键盘快捷键无关。就像将窗口拖动到屏幕边缘的神奇位置一样。窗口管理器,无论是由于错误还是 Aero Snap 的功能,仍然允许您有效地“最大化”不应以其他方式最大化的窗口。设置 MaximizeBox
属性不会对此产生影响,因此如果您真的想阻止用户以这种方式更改窗口大小,则需要禁用 Aero Snap 对窗口的影响。
不幸的是,没有任何方法(至少,据我所知)以编程方式在每个窗口或每个进程的基础上禁用 Aero Snap(另请参阅 this related question)。如果用户启用了 Aero Snap,您可以假设他们想要这种行为并且应用程序不应该篡改它。您唯一可以做的就是完全禁用调整窗口大小。在 WinForms 中,您可以通过设置 FormBorderStyle
来实现。属性为以下之一:FormBorderStyle.FixedSingle
、FormBorderStyle.Fixed3D
或 FormBorderStyle.FixedDialog
。如果您仍然希望您的窗口以其他方式调整大小,您将需要编写代码来手动处理,这不是一个特别容易的任务。
因此,我鼓励您非常仔细地考虑这是否真的有必要。所有其他不可最大化的窗口只需设置 MaximizeBox
属性(或在其 UI 框架中执行等效操作)即可实现此目的,这意味着它们仍然可以通过 Aero Snap 有效地最大化。如果这适用于其他所有人的窗口,包括那些属于 Windows 本身的窗口,那么它应该也适用于您。
关于c# - 防止Winform最大化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13381127/