我想阻止我的桌面應用程序被最大化。它不應該成爲任何手段最大化 - 通過雙擊標題欄,或者通過點擊鍵盤上的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. 防止類被實例化的最佳方法?
- 8. 防止文字被放大/縮小
- 9. python如何防止類被子類化?
- 10. 防止某些字段被序列化
- 11. 防止NaN被Hibernate持久化
- 12. 如何防止功能被優化
- 13. 防止解決方案被簡化
- 14. 我可以防止WPF中的窗口最大化嗎?
- 15. 「x」最小化WinForm,ContextMenu關閉WinForm?
- 16. 如何防止WinForm控件伸展並保持固定大小
- 17. iPhone/iPod - 防止字體大小變化
- 18. 防止@Version達到最大值
- 19. 最小化FormClose防止電腦關機
- 20. 如何防止窗口最小化?
- 21. 防止大寫
- 22. 取消WinForm最小化?
- 23. 當tmp空間最大化時MySQL進程被終止
- 24. 如何最大化我的主窗口並防止在QT中調整大小
- 25. 如何防止鉻從變化與最小輸入的寬度和最大值
- 26. 防止reveal.js放大
- 27. 防止序列化
- 28. 如何防止持久化對象被序列化?
- 29. C#WinForms:當父表單最小化時,如何防止子表單被最小化?
- 30. 防止window.onload被覆蓋javascript
考慮爲你的第二個問題創建另一個問題關於快捷方式 – emartel
我也做了這個,我發現這一切都在谷歌。有些屬性需要設置爲false,有些則需要覆蓋。 – Pavenhimself