我想阻止我的桌面应用程序最大化。它不应该通过任何方式最大化 - 通过双击标题栏,或通过单击键盘上的Windows +向上箭头等。
- >我禁用 MaximizeBox 和 MinimizeBox 。
- >我还为我的WinForm设置了 MaximumSize 和 MinimumSize
当我按下 Windows + Up 箭头时,我的胜利形式转移到屏幕的左上角,我的意思是它最大化了。
所以请告诉我任何方法来防止这件事发生......
答案 0 :(得分:13)
这里有两个完全不同的问题。当然,从功能的角度来看,它们看起来基本相同,但从实现模型的角度来看(就像Windows本身自然会使用的那样)它们是无关的。
正如其他人已经回答的那样,您可以通过将其MaximizeBox
属性设置为false
来阻止您的表单最大化。这将删除窗体底层窗口上的WS_MAXIMIZEBOX
style,这会阻止窗口管理器允许窗口最大化。它禁用窗口标题栏上的最大化框(最小化框和关闭框之间的最大框),禁用窗口/系统菜单上的“最大化”选项,以及最大化我可能忘记的窗口的任何其他方法。
然而,这与 Win + ↑键盘快捷方式无关,后者调用Aero Snap与将窗口拖动到魔法相同位置坐在屏幕的边缘。窗口管理器,无论是由于错误还是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本身的窗口,它可能适合你。
答案 1 :(得分:9)
表单有一个名为MaximizeBox
的属性 - 将其设置为false。
关于第二个问题,请查看this question and it's answers以了解在WinForms中实现键盘快捷键的最佳方法。
答案 2 :(得分:5)
this.FormBorderStyle = FormBorderStyle.FixedSingle;
该行代码将阻止用户重新调整Window的大小。
除此之外,你隐藏/禁用最大化框,并且应该按照你的要求进行操作。
要禁用最大化框,请使用此
this.MaximizeBox = false;
要隐藏最大化框,请使用此选项
this.MinimizeBox = false;
如果将“最大化”和“最小化”设置为false,则按钮将消失。
答案 3 :(得分:2)
将MaximumSize设置为等于大小(或某个大小)至少会阻止窗口全屏显示。它仍然会向左上角移动,但它至少仍然是一个窗口并且看起来正确 - 就像Windows是愚蠢而不是你的程序。
答案 4 :(得分:2)
您可以通过设置:
来阻止窗口捕捉到左上角private void toolbox_Move(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Normal;
}
在表单的移动事件中。
答案 5 :(得分:1)
Form类的一个名为“MaximumBox”的属性你必须在表单的属性窗口中设置False ...这实际上会禁止表单以任何方式最大化...另外如果你想要控制您的表单大小,您可以使用“MinimumSize,MaximumSize”等属性自行设置其值或为MaximumSizeChanged和MinimumSizeChanged事件创建事件处理程序...
答案 6 :(得分:1)
如果您的窗口或应用程序已激活,您可以尝试RegisterHotKey Win + Up,如果已取消激活,则取消注册此热键。您必须捕获热键并返回适当的值以防止进一步处理。
查看WM_ACTIVATEAPP
,WM_ACTIVATE
和WM_NCACTIVATE
。如果要为所有窗口禁用Win + UP,可以使用第一个。
答案 7 :(得分:1)
将formborderstyle设置为fixsingle
Maximizebox=false
将maximumsize设置为winform的默认大小的大小
例如:如果大小为(646,385),则设置最大值为(646,385)
答案 8 :(得分:0)
您可以做的一件事是将MaximumSize和MinimumSize设置为相同的值,而不是0.0。