【问题标题】:Why can I not set form location property this way?为什么我不能以这种方式设置表单位置属性?
【发布时间】:2013-03-24 14:20:45
【问题描述】:

我的申请有两种形式。我想将一个表格放在另一个表格前面。我想了解为什么这段代码不起作用:

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

第二个表单似乎定位正确,但是很可惜,它是不可见的。

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

【问题讨论】:

  • 这里有几个不好的做法,但核心原因是您忘记将表单的 StartPosition 属性设置为 Manual。
  • 嗨,汉斯!感谢您的帮助,它成功了!但是为什么第一个表格显示在正确的位置?能否请您详细说明不良做法?
  • 这是一个需要书本的问题,我们不在这里写。自己发现这一点的最好方法是用 C# 编写一段时间的代码,它不会让你摆脱这种编程风格。脑移植会很痛苦,你会失去一年的生命,但在那之后你会成为一个更好的程序员,并彻底理解类和对象之间的区别。
  • 我有书。你能给我介绍一下正确的章节吗?我没有一年用 C# 编写代码。

标签: vb.net winforms visual-studio-2010 windows-7


【解决方案1】:

正如 Hans 在 cmets 中提到的,您需要将 Form.StartPosition 设置为 FormStartPosition.Manual 以便表单读取您设置的位置。有关如何以及为何采用这种方式的更多信息,请参阅this question on StackOverflow.com

【讨论】:

    猜你喜欢
    • 2014-09-22
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    相关资源
    最近更新 更多