我试图简单地将一个面板放在一个表格中。我这样做是使用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
来进行手动解决方法。它现在居中,但感觉就像我被骗了,我仍然不知道为什么我必须首先做到这一点,我无法弄清楚为什么左侧有某种填充。
答案 0 :(得分:1)
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在下面评论中的澄清,获得实际的"中间"形式,没有边框和装饰:
<强>&#34; 强>
我不想在此包含边框,这解释了我遇到此问题的原因。这有效:
pnlRadios.Location = New Point((Me.DisplayRectangle.Width - pnlRadios.Width) / 2, 5)
<强>&#34; 强>