2012-11-14 46 views
5

我想阻止我的桌面應用程序被最大化。它不應該成爲任何手段最大化 - 通過雙擊標題欄,或者通過點擊鍵盤上的Windows +向上鍵等

- >我禁用MaximizeBoxMinimizeBox兩者。
- >我還設置了MAXIMUMSIZE的minimumSize我的WinForm

不過當我按下的Windows +向上箭頭,我贏的形式轉移到左上角的屏幕上,我的意思是它得到最大化。 所以請告訴我任何方式來防止這種情況發生......防止Winform被最大化?

+3

考慮爲你的第二個問題創建另一個問題關於快捷方式 – emartel

+0

我也做了這個,我發現這一切都在谷歌。有些屬性需要設置爲false,有些則需要覆蓋。 – Pavenhimself

回答

10

實際上這裏有兩個完全獨立的問題。當然,從功能的角度看它們基本上是一樣的,但是從實現模型的角度來看(就像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.Fixed3DFormBorderStyle.FixedDialog。如果您仍然希望以其他方式調整窗口大小,則需要編寫代碼來手動處理,這不是一件特別容易的任務。

因此,我鼓勵您非常仔細地考慮這是否真的有必要。所有其他非最大化窗口只需設置MaximizeBox屬性(或在其UI框架中執行相同操作)即可完成此操作,這意味着它們仍可通過Aero Snap實現最大化。如果這適用於其他人的窗口,包括那些屬於Windows本身的窗口,那麼它可能適合你。

+1

我遇到了這個尋找類似的答案,並將MaximizeBox設置爲false似乎阻止任何最大化路徑。我猜這是現在和發佈這個答案之間的問題。或者我錯過了什麼? – Karlovsky120

9

該窗體有一個名爲MaximizeBox的屬性 - 將其設置爲false。

關於第二個問題,請查看this question and it's answers以獲取在WinForms中實現鍵盤快捷鍵的最佳方法。

+1

MaximizeBox = false不會停止Windows +向上箭頭的快捷方式來最大化任何窗口...如果我沒有錯,因爲我面臨同樣的問題,在我的應用程序.... –

+0

您可以隨時禁用Windows +向上快捷方式以及,然後專注於使其他每個鍵盤快捷鍵都可以使用。 – lifetimes

+0

應該正常工作,但事實並非如此。搗毀它的作品,https://stackoverflow.com/a/47994707/17034 –

1

有一個名爲「MaximumBox」的Form類的屬性,您必須在窗體的屬性窗口中設置False ...這實際上將禁止以任何方式最大化窗體...此外,如果你想控制你的表格大小可以用這樣的屬性「的minimumSize,MAXIMUMSIZE」由您決定設置它們的值或創建的MaximumSizeChanged和MinimumSizeChanged事件的事件處理工作...

+0

這件事不是工作夥計.. 窗口正在轉移到左上角,就像當你試圖最大化一個16位的dos基礎應用程序在您的32位Windows操作系統上... 它只是去左上角,然後否認任何運動,如當你最大化任何窗口... 我的意思是大小保持不變,但所有其他屬性是相同的當任何正常的窗口是最大化.. 有沒有辦法解決這個問題...? –

3
this.FormBorderStyle = FormBorderStyle.FixedSingle; 

這行代碼會阻止用戶從重新調整窗口的大小。

除此之外,你隱藏/禁用最大化框,並應該做你所問。

要禁用最大化框使用此

this.MaximizeBox = false; 

要隱藏最大化框使用以及

this.MinimizeBox = false; 

如果最大化和最小化被設置爲false的按鈕消失。

+0

好友這將做,但m有FormBorderStyle = FormBorderStyle.None自定義窗體。有沒有其他方法可以做到這一點... –

+0

您可以禁止'WINKEY + UP'組合以防止窗口最大化。除此之外,我會將最大/最小尺寸設置爲固定值。這個解決方案看起來很骯髒,但如果你的要求是'FormBorderStyle.None'選項,那可能是你最好的選擇。 –

1

將MaximumSize設置爲等於大小(或某個大小)至少會使窗口停止全屏顯示。它仍然捕捉到左上角,但它至少仍然是一個窗口,看起來是正確的 - 就像Windows是愚蠢的,而不是你的程序。

2

您可以通過設置阻止Windows捕捉到左上角:

private void toolbox_Move(object sender, EventArgs e) 
{ 
    this.WindowState = FormWindowState.Normal; 
} 

形式的移動事件。

1

如果您的窗口或應用程序已激活,您可以嘗試RegisterHotKey Win + Up,如果取消激活它,則取消註冊此熱鍵。您必須抓住熱鍵並返回適當的值以防止進一步處理。

請看WM_ACTIVATEAPP,WM_ACTIVATEWM_NCACTIVATE。如果您想禁用所有窗口的Win + UP,則可以使用第一種方法。