2009-01-29 74 views
105

我試圖在表單中居中放置一個固定大小的控件。.NET中的窗體中的控件居中(Winforms)?

出於興趣,是否有一種非愚蠢的方式來做到這一點?我真正想要的是類似於text-align css屬性的東西。

此刻,我將周圍窗體的填充屬性設置爲合適的大小,並設置要填充的控件的Dock屬性。

+0

簡單的解決方案[這裏](http://stackoverflow.com/a/10786900/730701 )。 – Adam 2014-10-09 14:36:32

回答

217

您可以使用錨點來實現此目的。或者更準確地說不使用它們

控件默認錨定在表單的左上角,這意味着當表單大小將被更改時,它們與表單左上角的距離將保持不變。如果將控件錨點更改爲左下角,則當表單調整大小時,控件將保持與表單底部和左側的距離相同。

在調整方向時關閉錨定方向將使控件保持居中。

注:關閉通過在VS2015屬性窗口錨定,可能需要進入無,無(而不是默認的上,左)

+0

因此,您可以將控件放置在窗體的中心(大約或完全使用「屬性」面板),或者在Form.Load事件處理程序中,將Control.Left,Control.Top屬性設置爲Control.Size和Form。尺寸。 – maxwellb 2010-07-13 18:09:07

+0

太棒了,我從來沒有想過要退出Anchor屬性的所有方面,現在如果我調整控件的大小保持居中。 !大! – FabianSilva 2012-03-23 13:52:15

+1

然後,如果我在中心的表單中放置一個標籤並將它的Anchor設置爲None,那麼爲什麼窗體窗口最大化時它不會保持在中心位置? – user1004959 2012-07-18 11:37:01

84
myControl.Left = (this.ClientSize.Width - myControl.Width)/2 ; 
myControl.Top = (this.ClientSize.Height - myControl.Height)/2; 
1

它包括目測它(好,我想你可以滾蛋一個計算器和計算),但只需在表單上插入所述控件,然後刪除任何錨定(錨點=無)。

31

既然你沒有說明如果表單可以調整或不存在一個簡單的方法,如果你不在乎調整(如果你做護理,去與米奇小麥溶液):

選擇控制 - >格式(菜單選項) - >在窗口中居中 - >水平或垂直

8

我發現了一個很好的方法來做到這一點,它將與多個控件一起使用。添加一個3列的TableLayout。使中心列成爲絕對大小(無論您需要多少空間)。將兩個外部列設置爲100%。將面板添加到中心列並添加您需要的任何控件,並將它們放在您想要的位置。該中心小組現在將繼續以您的表單爲中心。

2

你可以把你想要控制在一個面板中心,並設置左右填充值大於默認值。只要它們是平等的,而且你的控制權固定在專家組的兩邊,那麼它就會出現在該專家組的中心。然後,您可以根據需要將容器面板錨定到其父項。

-2

如果父窗口最大化,則在左上方和頂部屬性。

1

要在面板中心按鈕○在其他容器按照此步驟:

  1. 在設計時設定的位置
  2. 轉到屬性錨按鈕的並設置該值作爲後續圖像

enter image description here

0

,你可以把你所有的控件面板,然後寫一個將面板移動到表單中心的代碼。

panelMain.Location = 
    new Point(ClientSize.Width/2 - panelMain.Size.Width/2, 
       ClientSize.Height/2 - panelMain.Size.Height/2); 

panelMain.Anchor = AnchorStyles.None; 
0

另外,如果你想在另一個另一個控制中心對齊:

//The "ctrlParent" is the one on which you want to align "ctrlToCenter". 
//"ctrlParent" can be your "form name" or any other control such as "grid name" and etc. 
ctrlToCenter.Parent = ctrlParent; 

ctrlToCenter.Left = (ctrlToCenter.Parent.Width - ctrlToCenter.Width)/2; 
ctrlToCenter.Top = (ctrlToCenter.Parent.Height - ctrlToCenter.Height)/2;