取得したマウス座標がForm2に、反映されない

タグの編集
投稿者 winvis  (学生) 投稿日時 2009/10/4 10:19:49
まず、Form2に、PictureBoxが、あります
Form1に、100に、設定したTimerが、あります
VBサンプル集 - VB.netのマウスの位置を取得するでマウスの座標をフォーム座標で取得するを、使って
Form1上のマウス座標を、取得して、その座標にForm2のPicture Boxを、移動させると、言うソースをくんでいるのですが
どうにも、Form2のPicture Boxが、動きません
Me.textで、取得した座標をForm1で、表示させているので、座標の取得は、問題がないと思うのですが・・・
'以下がソースコードです
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim f As New Form2
        f.Owner = Me
        f.Show()
        Timer1.Enabled = True
    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim X As Integer
        Dim Y As Integer
        Dim Pos As Point = Me.PointToClient(Windows.Forms.Cursor.Position)
        X = Pos.X
        Y = Pos.Y
        Form2.PictureBox1.Location = New Point(X, Y)
        Me.Text = X & ", " & Y
    End Sub
End Class
投稿者 YuO  (社会人) 投稿日時 2009/10/4 11:08:38
Form1_Loadで使っているのはそこで作成したForm2のインスタンスですが,
Timer1_Tickで使っているのはForm2の既定 (暗黙) のインスタンスになります。

たとえば,Loadイベントで作るインスタンスはフィールドにし,
それをTickイベントを使うようにしてみてはどうでしょう。
# 一応,既定インスタンスで全部回す事は出来る物の,Form1が複数作られたらアウトなので。
投稿者 winvis  (学生) 投稿日時 2009/10/5 08:57:11
返答ありがとうございます
winvisです
>たとえば,Loadイベントで作るインスタンスはフィールドにし,
>それをTickイベントを使うようにしてみてはどうでしょう。
つまり、こういうことですか?
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim f As New Form2
        f.Owner = Me
        f.Show()
    Dim X As Integer
        Dim Y As Integer
        Dim Pos As Point = Me.PointToClient(Windows.Forms.Cursor.Position)
        X = Pos.X
        Y = Pos.Y
        Form2.PictureBox1.Location = New Point(X, Y)
        Me.Text = X & ", " & Y
    End Sub

と、いうことですか?
投稿者 取得したマウス座標がForm2に、反映されない  (学生) 投稿日時 2009/10/5 10:00:26
form2をfに変更したら、思った通りの動作になりました
お騒がせしました