我有一個表單,它是一個mdicontainer,並在頂部有一個菜單條。我向我的mdi容器中添加一個子表單,當我最大化孩子時,它會在菜單條上最大化。我想知道如何限制孩子在菜單欄下方最大化。任何幫助,將不勝感激。在有限的區域內最大化孩子mdi
回答
你的孩子的形式正在被最大化的方式是,兒童形式應該在MDI中最大化。它並不真正覆蓋父表單的菜單條 - 它實際上是將它自己的菜單條與父表單條合併在一起。
讓孩子形式只佔用可用子區的MDI父(而不是與父菜單合併其菜單),把這樣的代碼在子窗體的Resize事件:
if (this.WindowState == FormWindowState.Maximized)
{
this.WindowState = FormWindowState.Normal;
this.Size = this.MdiParent.ClientSize;
this.Location = new Point(0, 0);
}
這將防止子窗口實際上被最大化。
我說「類似這樣的代碼」,因爲這段代碼無法正常工作。父窗體的ClientSize
屬性給出了窗體的整體大小,而您只想使用MDI客戶區的大小。我不知道該怎麼做,顯然這並不容易。看到這個問題:
您可以設置MaximumSize屬性,以便它不會填滿整個容器。
它的工作原理除了它將它一直放在頂部並離開底部的開放空間。如果我將位置設置在菜單欄下方,它將首次運行,但在此之後它會再次將其重新放回頂部。 – 2009-10-21 22:38:50
我知道這一個老問題,但我只是碰到了這對舊項目我的工作,所以這裏的任何人看到這個答案。將Dock設置爲DockStyle.Fill將爲您提供所需的行爲。
請注意,如果您嘗試在具有DockStyle的窗口重新定位或調整窗口大小時,該窗口將會顯示/看起來很奇怪。
爲了達到這個目的,我訂閱了MDI客戶窗口的resize事件,如果窗口剛被最大化,我將它的DockStyle設置爲Fill,將FormBorderStlye設置爲FixedDialog(以防止調整大小),並將窗口狀態設置爲正常以防止發生最大化。
爲防止用戶在窗口處於「最大化狀態」時移動窗口,我簡單地覆蓋了WndProc方法,並在窗口被移動(SC_MOVE)時進行處理並放置返回以防止操作生效。
- 1. MDI孩子沒有最大限度地創建
- 2. Infragistics功能區遍歷最大化的MDI子代
- 3. mdi子窗體最大化windowstate - BorderStyle
- 4. 關閉MDI孩子
- 5. MDI父母孩子
- 6. MDI小孩最大化時顯示圖標
- 7. iBeacon - 監控區域的最大限制
- 8. C#MDI孩子沒有顯示
- 9. MDI子只在WindowState最大化時可見
- 10. WinForm的孩子,但在MDI容器
- 11. G1 GC是否具有最大區域大小或區域最大量?
- 12. XSD - 最大的孩子?
- 13. Delphi:最大化MDI項目中的子窗口
- 14. 當我關閉最大化的MDI子表格
- 15. 帶FormBorderStyle的MDI子代=無無法正確最大化
- 16. Delphi使用AnimateWindow創建最大化的MDI子項目
- 17. Vista上的MDI子窗體最大化問題
- 18. 面板中MDI父最大化
- 19. 最大化MDI表單行爲
- 20. 當MDI Child最大化時刪除MDI容器窗體的默認MDI菜單
- 21. 在MDI形式打開一個孩子
- 22. MDI孩子總是在頂部C#Winforms
- 23. 僅限區域內的MKAnnotation
- 24. Mdi子窗口最大化與菜單欄合併
- 25. MDI的孩子顯示ContextMenu分配給他們的MDI父
- 26. 如何更改活動的mdi孩子?
- 27. 使用避免區域的最大避免區域數量超過限制
- 28. 將點插入有限的2D區域,並與現有點的距離最大
- 29. 如何在其windowstate =最大化的mdi容器窗體中顯示子窗體?
- 30. PanGestureRecognizer的有限區域
男孩,三年後,我真的不知道我的意思是「它不是超級簡單」,當我連接的答案給出了一個*超簡單*的方法來確定這一點。 – MusiGenesis 2013-01-16 03:53:32