2014-07-14 61 views
1

我試圖簡單地將一個面板居中放置在一個窗體中。我通過使用簡單公式Object Location = (Container Width - Object Width)/2來做到這一點。這是將對象移動到其容器中心的簡單數學方法(x軸)。如何讓一個對象以表格的形式居中

但是,它無法正常工作。它在左邊放置了大概10個像素的額外空間,我無法弄清楚爲什麼。如果足夠縮小窗體的大小,面板會觸摸窗體的右側,但距離左側仍有大約十個像素。

我檢查過,以確保任何保證金或填充屬性設置爲0,但沒有運氣。

有人知道爲什麼會發生這種情況,以及如何解決它?

這裏是我的確切代碼:

Private Sub Form_Loaded(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    'Center Object 
    pnlRadios.Location = New Point((Me.Width - pnlRadios.Width)/2, 5) 
End Sub 

更新:我也試過:

pnlRadios.Location = New Point(Me.Width/2 - pnlRadios.Width /2 , 5)

pnlRadios.Left = Me.Width/2 - pnlRadios.Width/2

和每次嘗試都獲得完全相同的結果。

更新2:我能夠通過在公式中添加- 10來做手動解決方法。它現在居中,但感覺就像我受騙一樣,我仍然不知道爲什麼我必須這樣做,我無法弄清楚爲什麼左側有某種填充。

回答

1

你試過嗎?我相信幾年前我有同樣的問題。我認爲它與本TODO:

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.desktopbounds(v=vs.110).aspx

顯示寬度,可以從表單的實際寬度不同......以像素爲單位。(也許主題化..誰知道...)

運行這段代碼...

MsgBox("width = " & Me.Width & vbCrLf & vbCrLf & _ 
"desktopbound width = " & Me.DisplayRectangle.Width) 

編輯:依照OP的澄清在下面的意見,以獲得形式的實際「中間」,無國界和裝飾:

我並不想在這裏面的邊界解釋了爲什麼我有這個問題。這工作:

pnlRadios.Location = New Point((Me.DisplayRectangle.Width - pnlRadios.Width)/2, 5) 

+0

有趣的特性瞭解,但我沒有看到任何可能影響到什麼形式的內部發生,這隻能控制其中的形式本身就是 –

+0

。但它變得更有趣......再看一遍,setdesktopbounds在屏幕上設置「顯示」寬度......但是您可以使用displayrectangle.width來讀取該屬性......我更新了問題...... –

+0

啊,非常好的主意。作爲一個輸出,我得到了:'width = 290 - desktopbound width = 270' –