设置与父表单按钮相关的表单位置

时间:2013-04-02 15:03:44

标签: vb.net winforms

我有一份MDI(父母)表格和另外两份表格。在form1上有一个按钮,位置是(X:100,Y:200)。当用户通过Form1单击按钮时,我需要打开另一个表单“Form2”。 Form2的位置应该在按钮的正中间(发件人)。

我写这段代码

   Private Sub UpdateLocation(ByVal element As Control, ByVal frm As Form)
        Dim p As New Point(element.Location)
        p = element.PointToScreen(p)
        p.X = p.X + element.Width + 10
        p.Y = p.Y / 2

        Debug.Print(p.ToString)
        frm.Location = p
        frm.BringToFront()
    End Sub

但Form2位置不符合预期。 我在按钮点击事件

上调用上述功能
    UpdateLocation(form1.button1, form2)

任何帮助都会很明显。 提前谢谢。

以上代码的输出是:

Button1_Click

经过几次测试后,我意识到point.x(location.x)正在运行,但不是point.y(location.y)

You can download the piece of code from here。你可以检查它的实际问题。 VS2010是必需的。

3 个答案:

答案 0 :(得分:0)

我认为你需要考虑按钮和表格的高度,如果你想要它在中间:

Dim p As Point = Me.MdiParent.PointToScreen(element.Location)
p.X += element.Width + 10
p.Y += (element.Height / 2) - (frm.Height / 2)

答案 1 :(得分:0)

试试这个,

Private Sub UpdateLocation(ByVal element As Control, ByVal frm As Form)

        Dim p As New Point(element.Location)
        p = element.parent.PointToScreen(p)
        p.X = p.X + element.Width + 10
        p.Y = p.Y + (element.height/2)

        Debug.Print(p.ToString)
        frm.Location = p
        frm.BringToFront()

 End Sub

答案 2 :(得分:0)

“解决”,只是再次确认

Private Sub UpdateLocation(ByVal element As Control, ByVal frm As Form)
        If IsNothing(element) Then
            Exit Sub
        End If
        Dim p As New Point(element.Location)
        p = element.Parent.PointToScreen(p)
        p.X = p.X + element.Width + 5
        p.Y += (element.Height / 2) - (frm.Height / 2)

        frm.Location = p
        frm.BringToFront()
End Sub

此代码在我的所有情况下都100%正常工作。