在窗体上居中(完美)动态创建按钮?

时间:2011-07-31 13:43:06

标签: vb.net button load center

这是我在这里的第一篇文章,所以我希望我能提供所有正确的信息。

我目前正在开发一个简单的菜单应用程序,它具有一个按钮控件数组(使用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))

2 个答案:

答案 0 :(得分:7)

那是因为你使用了错误的变量,Width和Height包括边框和标题。您应该使用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

答案 1 :(得分:3)

Anchor属性设置为AnchorStyles.None将导致控件在水平和垂直方向居中。

control.Anchor = AnchorStyles.None

保持垂直定位(仅水平居中):

control.Anchor = AnchorStyles.Top

保持水平定位(仅垂直居中):

control.Anchor = AnchorStyles.Left

Source

我尝试过,它对我有用。控件将在父元素中居中。