我想阻止我的桌面应用程序被最大化。它不应该成为任何手段最大化 - 通过双击标题栏,或者通过点击键盘上的Windows +向上键等
- >我禁用MaximizeBox和MinimizeBox两者。
- >我还设置了MAXIMUMSIZE和的minimumSize我的WinForm
不过当我按下的Windows +向上箭头,我赢的形式转移到左上角的屏幕上,我的意思是它得到最大化。 所以请告诉我任何方式来防止这种情况发生......防止Winform被最大化?
回答
实际上这里有两个完全独立的问题。当然,从功能的角度看它们基本上是一样的,但是从实现模型的角度来看(就像Windows自然使用的那样),它们是无关的。
正如其他人所回答的,您可以通过将其MaximizeBox
属性设置为false
来防止表单被最大化。这将删除窗体底层窗口上的WS_MAXIMIZEBOX
style,这可以防止窗口管理器允许窗口最大化。它禁用窗口标题栏上的最大化框(最小化框和关闭框之间的一个),禁用窗口/系统菜单上的“最大化”选项,以及任何其他最大化我可能已经忘记的窗口的方法。
然而,这有什么好做的赢 + ↑键盘快捷键,这将调用Aero Snap一样会拖动窗口到魔法位置坐在屏幕的边缘。窗口管理器不管是作为Aero Snap的缺陷还是功能的结果,仍然允许您有效地“最大化”不应该最大化的窗口。设置MaximizeBox
属性不会影响这一点,所以如果您真的想阻止用户通过这种方式更改窗口大小,您需要禁用Aero Snap对窗口的影响。
不幸的是,在每个窗口或每个进程的基础上(也请参阅this related question),没有方法(至少,不是我所知的)以编程方式禁用Aero Snap。如果用户启用了Aero Snap,则可以假定他们希望这种行为和应用程序不应该篡改它。您唯一能做的就是彻底禁用调整窗口大小。在WinForms中,通过将FormBorderStyle
属性设置为以下值之一来执行此操作:FormBorderStyle.FixedSingle
,FormBorderStyle.Fixed3D
或FormBorderStyle.FixedDialog
。如果您仍然希望以其他方式调整窗口大小,则需要编写代码来手动处理,这不是一件特别容易的任务。
因此,我鼓励您非常仔细地考虑这是否真的有必要。所有其他非最大化窗口只需设置MaximizeBox
属性(或在其UI框架中执行相同操作)即可完成此操作,这意味着它们仍可通过Aero Snap实现最大化。如果这适用于其他人的窗口,包括那些属于Windows本身的窗口,那么它可能适合你。
我遇到了这个寻找类似的答案,并将MaximizeBox设置为false似乎阻止任何最大化路径。我猜这是现在和发布这个答案之间的问题。或者我错过了什么? – Karlovsky120
该窗体有一个名为MaximizeBox
的属性 - 将其设置为false。
关于第二个问题,请查看this question and it's answers以获取在WinForms中实现键盘快捷键的最佳方法。
MaximizeBox = false不会停止Windows +向上箭头的快捷方式来最大化任何窗口...如果我没有错,因为我面临同样的问题,在我的应用程序.... –
您可以随时禁用Windows +向上快捷方式以及,然后专注于使其他每个键盘快捷键都可以使用。 – lifetimes
应该正常工作,但事实并非如此。捣毁它的作品,https://stackoverflow.com/a/47994707/17034 –
有一个名为“MaximumBox”的Form类的属性,您必须在窗体的属性窗口中设置False ...这实际上将禁止以任何方式最大化窗体...此外,如果你想控制你的表格大小可以用这样的属性“的minimumSize,MAXIMUMSIZE”由您决定设置它们的值或创建的MaximumSizeChanged和MinimumSizeChanged事件的事件处理工作...
这件事不是工作伙计.. 窗口正在转移到左上角,就像当你试图最大化一个16位的dos基础应用程序在您的32位Windows操作系统上... 它只是去左上角,然后否认任何运动,如当你最大化任何窗口... 我的意思是大小保持不变,但所有其他属性是相同的当任何正常的窗口是最大化.. 有没有办法解决这个问题...? –
this.FormBorderStyle = FormBorderStyle.FixedSingle;
这行代码会阻止用户从重新调整窗口的大小。
除此之外,你隐藏/禁用最大化框,并应该做你所问。
要禁用最大化框使用此
this.MaximizeBox = false;
要隐藏最大化框使用以及
this.MinimizeBox = false;
如果最大化和最小化被设置为false的按钮消失。
好友这将做,但m有FormBorderStyle = FormBorderStyle.None自定义窗体。有没有其他方法可以做到这一点... –
您可以禁止'WINKEY + UP'组合以防止窗口最大化。除此之外,我会将最大/最小尺寸设置为固定值。这个解决方案看起来很肮脏,但如果你的要求是'FormBorderStyle.None'选项,那可能是你最好的选择。 –
将MaximumSize设置为等于大小(或某个大小)至少会使窗口停止全屏显示。它仍然捕捉到左上角,但它至少仍然是一个窗口,看起来是正确的 - 就像Windows是愚蠢的,而不是你的程序。
您可以通过设置阻止Windows捕捉到左上角:
private void toolbox_Move(object sender, EventArgs e)
{
this.WindowState = FormWindowState.Normal;
}
形式的移动事件。
如果您的窗口或应用程序已激活,您可以尝试RegisterHotKey Win + Up,如果取消激活它,则取消注册此热键。您必须抓住热键并返回适当的值以防止进一步处理。
请看WM_ACTIVATEAPP
,WM_ACTIVATE
和WM_NCACTIVATE
。如果您想禁用所有窗口的Win + UP,则可以使用第一种方法。
- 1. 防止MaxSized C#WinForm在最大化时移动
- 2. 完全最大化C#WinForm
- 3. JToolBar防止最小化
- 4. WinForm最大化托盘还原?
- 5. 在WinForm上禁用最小化和最大化?
- 6. 如何从任务栏最小化和最大化winform?
- 7. 如何防止MDI文档被最小化
- 8. 防止类被实例化的最佳方法?
- 9. 防止文字被放大/缩小
- 10. python如何防止类被子类化?
- 11. 防止某些字段被序列化
- 12. 防止解决方案被简化
- 13. 防止静态库被初始化
- 14. 防止NaN被Hibernate持久化
- 15. 如何防止功能被优化
- 16. 防止被格式化这样的“24.000.000”
- 17. 防止从任务管理器(WPF应用程序)最大化
- 18. 我可以防止WPF中的窗口最大化吗?
- 19. “x”最小化WinForm,ContextMenu关闭WinForm?
- 20. 如何防止WinForm控件伸展并保持固定大小
- 21. 当JInternalFrame被最大化/最小化时被触发的事件
- 22. 防止@Version达到最大值
- 23. 防止超过最大递归深度
- 24. iPhone/iPod - 防止字体大小变化
- 25. 最小化FormClose防止电脑关机
- 26. 如何防止窗口最小化?
- 27. 防止大写
- 28. 防止C#中的XSS Winform WebBrowser
- 29. 防止输入类型的最大>最大值=数字
- 30. 取消WinForm最小化?
考虑为你的第二个问题创建另一个问题关于快捷方式 – emartel
我也做了这个,我发现这一切都在谷歌。有些属性需要设置为false,有些则需要覆盖。 – Pavenhimself