0

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

我写这段代码

   Private Sub UpdateLocation(ByVal element As Control, ByVal frm As Form)
        将 p 调暗为新点(element.Location)
        p = element.PointToScreen(p)
        pX = pX + element.Width + 10
        pY = pY / 2

        Debug.Print(p.ToString)
        frm.Location = p
        frm.BringToFront()
    结束子

但 Form2 的位置不如预期。在按钮单击事件上调用上述函数

    更新位置(form1.button1,form2)

任何帮助都是不言而喻的。提前致谢。

上述代码的输出是:

Button1_Click

经过几次测试后,我意识到 point.x (location.x) 可以正常工作,但 point.y (location.y) 却不行

您可以从这里下载这段代码。你可以检查它的实际问题。需要 VS2010。

4

3 回答 3

0

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

Dim p As Point = Me.MdiParent.PointToScreen(element.Location)
p.X += element.Width + 10
p.Y += (element.Height / 2) - (frm.Height / 2)
于 2013-04-02T17:56:53.260 回答
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
于 2013-04-02T17:57:53.467 回答
0

“已解决”,再次确认

Private Sub UpdateLocation(ByVal element As Control, ByVal frm As Form)
        If IsNothing(element) Then
            退出子
        万一
        将 p 调暗为新点(element.Location)
        p = element.Parent.PointToScreen(p)
        pX = pX + element.Width + 5
        pY += (element.Height / 2) - (frm.Height / 2)

        frm.Location = p
        frm.BringToFront()
结束子

这段代码在我所有的案例中都能 100% 正常工作。

于 2013-04-03T16:11:46.817 回答