2013-03-24 55 views
1

我的申请有两种形式。我想把一个表格放在另一个表格的前面。我想知道为什么这个代码不工作:为什么我不能以这种方式设置表单位置属性?

Public Class Form1 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Me.Location = New Point(200, 200) 
    Form2.Location = New Point(200, 200) 
    Form2.BringToFront() 
End Sub 
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown 
    Form2.Visible = True 
    Me.Text = Form2.Location.X 
End Sub 
End Class 

当我运行的代码,第二种形式定位在屏幕上随机的地方。
如果我删除 Form2.Visible声明:

Public Class Form1 
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Me.Location = New Point(200, 200) 
    Form2.Location = New Point(200, 200) 
    Form2.BringToFront() 
End Sub 
Private Sub Form1_Shown(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Shown 
    Me.Text = Form2.Location.X 
End Sub 
End Class 

第二种形式似乎是正确的位置,但很可惜,这是不可见的。

我相信,有解决方法。我只是想了解为什么这么简单的事情不能按预期工作。

+1

这里有几个不好的做法,但其核心原因是您忘记将窗体的StartPosition属性设置为手动。 – 2013-03-24 14:41:53

+0

嗨,汉斯!感谢您的帮助,它的工作!但为什么第一种形式显示在正确的位置?你能否详细说明不好的做法? – GreenBear 2013-03-24 14:47:18

+0

这是一个需要一本书的问题,我们不会在这里写下它们。自己发现这个最好的方法是通过在C#中编写代码一段时间,它不会让你摆脱这种编程风格。大脑移植将会严重受伤,你会失去一年的生活,但在此之后,你将成为一个更好的程序员,并彻底地理解类和对象之间的差异。 – 2013-03-24 15:00:12

回答

相关问题