我有一份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)
任何帮助都会很明显。 提前谢谢。
以上代码的输出是:
经过几次测试后,我意识到point.x(location.x)正在运行,但不是point.y(location.y)
You can download the piece of code from here。你可以检查它的实际问题。 VS2010是必需的。
答案 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%正常工作。