2011-07-31 68 views
3

这是我在这里的第一篇文章,所以我希望我提供所有正确的信息。居中(完美)在窗体上动态创建按钮?

我目前正在开发一个简单的菜单应用程序,它有一个按钮控件数组(使用MSDN建议的控件数组解决方案),我很难调整窗体大小和居中按钮。这些按钮是在编译时创建的(使用来自INI文件的参数),我的当前居中算法似乎稍微将它们设置在右侧。我使用的是“button.location = new Point(...,...)”方法,但是在阅读了这篇文章之后,它说这些值将按钮定位在左上角而不是中心,因此会考虑到右侧的轻微偏移。

我的两个问题是这样的:

我怎样才能完美地在编译时中心这些按钮?我已经尝试通过减去按钮宽度的一半来计算差异,但按钮宽度和点属性似乎不兼容,并且按钮得到大量偏移。

而且......我调整菜单大小的另一个目标是让按钮在重新调整大小时完美展开和收缩。当动态创建按钮时,似乎锚定效果不佳,因此我不得不写入比率算法...有没有办法让锚定工作?

下面是我在负荷高达:

MyControlArray(i).Location = New Point(CInt(((Width - ButtonWidth)/2) +_ 
(ButtonWidth/2)), CInt((Height - MyControlArray(i).Height)/2)) 

我已经尝试:

New Point(CInt(((Width - ButtonWidth)/2)), CInt((Height - MyControlArray(i).Height)_ 
/2)) 

回答

7

那是因为你使用了错误的变量,宽度和高度包括边框和标题。您应该使用ClientSize属性。就像这样:

Protected Overrides Sub OnLoad(ByVal e As System.EventArgs) 
    MyBase.OnLoad(e) 
    Dim btn = New Button() 
    Controls.Add(btn) 
    btn.Location = New Point((ClientSize.Width - btn.Width) \ 2, _ 
          (ClientSize.Height - btn.Height) \ 2) 
End Sub 
+0

工作就像一个魅力,我学到了新东西。谢谢你! – Goat

3

Anchor属性设置为AnchorStyles.None将导致集中控制,水平和垂直。

control.Anchor = AnchorStyles.None 

要十个分量垂直定位(仅水平定心):

control.Anchor = AnchorStyles.Top 

要十个分量水平定位(仅垂直居中):

control.Anchor = AnchorStyles.Left 

Source

我试过了,它为我工作。该控件将在父元素中居中。