c# - 防止Winform最大化?

标签 c# .net windows winforms

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

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

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

最佳答案

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

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

但是,这与调用 Aero SnapWin+ 键盘快捷键无关。就像将窗口拖动到屏幕边缘的神奇位置一样。窗口管理器,无论是由于错误还是 Aero Snap 的功能,仍然允许您有效地“最大化”不应以其他方式最大化的窗口。设置 MaximizeBox 属性不会对此产生影响,因此如果您真的想阻止用户以这种方式更改窗口大小,则需要禁用 Aero Snap 对窗口的影响。

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

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

关于c# - 防止Winform最大化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13381127/

相关文章:

java - 无法运行 JAR 文件

c# - 避免在 ASP.NET Core Program.cs 中使用静态值

c# - 控制线程数以平衡 .NET 中的 CPU 和 IO 等待

.net - 建议在 asp.net mvc3 中使用富文本编辑器,其中包含页面大小设置、打印预览和页面缩放选项

windows - 如何检测 CMD 是否以管理员身份运行/是否具有提升的权限?

java - Windows 8 x64 : Usage: java [-options] class [args. 上的 Maven 3.0.4 错误 ..]

c# - DbMigration.AlterstoredProcedure( Entity Framework 迁移): How to represent type smallmoney?

c# - c#的免费报告

c# - 使单元格不可编辑

c# - C# 中的 libvlc 媒体播放器