1

私のアプリケーションには2つの形式があります。あるフォームを別のフォームの前に配置したいと思います。このコードが機能しない理由を理解したい:

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

コードを実行すると、2番目のフォームが画面上のランダムな場所に配置されます。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

2番目のフォームは正しく配置されているようですが、残念ながら表示されません。

確かに、回避策があります。このような単純なことが期待どおりに機能しない理由を理解したいだけです。

4

1 に答える 1

0

ハンスがコメントで述べているように、フォームが設​​定した場所を読み取るには、 Form.StartPositionFormStartPosition.Manualに設定する必要があります。この方法とその理由の詳細については、StackOverflow.comのこの質問を参照してください。

于 2013-11-10T14:49:04.473 に答える