2009-11-04 64 views
2

我開發的Windows Mobile 5.0及以上的應用,而在C#.NET Compact Framework的2.0 SP2對接和錨定在Windows窗體應用程序

我有一個WinForm裏面有兩個面板(upperPanel和bottomPanel)。我希望這個upperPanel總是填充表單高度的2/3,而bottomPanel填充表單高度的1/3。這兩個面板將完全填充表格的寬度。

我用這個:

upperPanel.Dock = Fill; 
bottomPanel.Dock = Bottom; 

但upperPanel完全地填寫表格。

我該怎麼做?我想,更多或更少,相同的gui 不同的外形因子風景protrait模式。

謝謝。

回答

9

你需要做的就是把底部面板上的第一和Dock屬性設置爲Bottom。然後將面板的高度設置爲表格高度的1/3。最後,添加第二個面板並將其Dock屬性設置爲Fill。這裏的關鍵是,你想添加控制,將填補最後添加的剩餘區域。或者,您可以在Visual Studio中使用「前置」和「後送」命令來讓設計人員進行合作。

您可能還需要掛鉤OnSizeChanged活動的形式和重新設置底板的高度來考慮佈局的改變。自從我做了緊湊的框架編程之後,我就有一段時間了,所以我不確定。

+0

「這裏的關鍵是,你想添加控制,將填補最後添加的剩餘區域」< - 這完全適合我。謝謝! – Gant 2010-03-16 11:27:29

+0

正如你所說,而不是增加最後一個,你可以解開,然後重新停靠......好! – Dunc 2013-05-23 08:42:06

1

將兩個面板都設置爲「未錨定」。即:刪除Dock-Value並清除Anchor屬性。然後,移動控件,以便按照您希望的尺寸調整大小。

之後,在調整表格大小後,應相對調整大小。

編輯
哎呀,只是試過了,確定它不起作用。我混合了一個解決方案,自動保持控件在窗口中居中...

嗯,我猜你必須創建一個窗體的Resize事件的處理程序,並手動對齊窗體後的控件調整大小。

+0

+1指出我的金髮時刻 – GenericTypeTea 2009-11-04 11:41:36

+0

^^沒問題:) – 2009-11-04 11:42:20

+0

不,它不起作用。 – VansFannel 2009-11-04 14:14:37

1

轉到工具,其他窗口,文檔大綱。找到兩個面板,並交換它們的順序。具有DockStyle.Fill的控制器必須首先對其進行正確對接。 (或最後..不知道它是哪一個,但它是其中之一:p)

這不會解決總是1/3和2/3的問題,儘管...因爲底部面板會有一個固定的高度(除非我錯了)。我想,也許是TableLayoutPanel支持這雖然......

更新:正如在評論中指出,該面板不緊湊的框架存在。所以,我想這個問題的最簡單的解決方案會嘗試使用停靠,但每當窗體大小發生變化時更新底部面板的高度。

+0

這是一個恥辱,但Compact Framework中沒有TableLayoutPanel。 – 2009-11-04 11:53:02

+0

順便說一句,你是正確的底部面板有一個固定的高度。 – 2009-11-04 11:54:08

+0

啊,好的。那麼,我從來沒有使用Compact Framework,只是常規的WinForms。 – Svish 2009-11-04 18:46:19

1

右鍵單擊upperPanel並選擇Bring To Front。但是,我不認爲這會給你想要的結果。當您調整大小時,底部面板將保持相同高度,而上部面板將伸展以填充表格。

使用您的對接設置,使用此代碼可能做的伎倆:

protected override void OnSizeChanged(EventArgs e) 
    { 
     base.OnSizeChanged(e); 

     this.bottomPanel.Height = Convert.ToInt32((double)this.Height/3.0); 
    } 
+0

如果你打算倒下,有勇氣說出原因。 – 2009-11-04 19:06:57

+1

我希望這是我的解決方案。 downvote之前嘗試它。 – VansFannel 2009-11-08 11:46:23

0

如果你想這很好地工作,你需要一些代碼添加到窗體的Resize事件,然後具體工作出相對大小和調整大小後會將控制在正確的位置。

如果你不擔心失去精度和形式都不會動太多,你可以通過使用一些比較聰明的錨固避免這種情況。基本上,你將不得不選擇一個「種植者」(形式越大,表單越大的部分)。在這種情況下,我可能會將頂部部分固定到頂部|離開|右側和底部到頂部|離開| Right |底部。這意味着如果表單展開,表單的下半部分會變大。大多數情況下這是可以接受的。如果它不使用Resize事件和一些代碼。

0

做到這一點,最簡單的方法是窩板。只需設置頂部底部的面板並填充。然後使用這些面板中的面板來做同樣的事情。我唯一遇到的問題是數據網格大小調整,無論如何這總是很痛苦。在這種情況下,您必須使用一些代碼來調整窗體resize事件上的datagrid控件的大小。

0

我想補充一點,以@jasonh答案。

對於佔據形式的2/3的面板上,你將不得不面板的AutoScroll屬性設置爲true。

當控制尺寸超過用戶的可見度時,這將使面板顯示滾動,同時確保較小面板的可見性爲窗體高度的1/3。

0

您可以通過使用嵌套面板以及少量設置使用錨定和停靠屬性來獲得所需的設計。按照以下步驟操作: 1)添加Form並在其上放置Panel1。將其Dock Property設置爲'填充'並將ResizeMode設置爲'增加&收縮'。 2)添加第二個panel2並將其Dock屬性設置爲'Bottom',設置高度並將Anchor屬性設置爲'Top,Left'。 3)添加第三個面板並將其Dock屬性設置爲'None',設置高度並將Anchor屬性設置爲'Top,Bottom,Left,Right'。

保存並編譯。現在所有的面板都將保持其相對於調整大小的定位。