質問: e.Y; } } ``` ところが、編集後のプログラムを動かすと、 ウィンドウが反復横跳びをするように動き回り、マウス位置にフォームが移動しません。 テキストのおかげで上のプログラムの仕組みは分かりました。 しかし、なぜ編集後のプログラムが変な挙動になってしまうのかが分かりません。 乱雑な質問で分かりにくいかとは思いますが、 もし分かるようでしたら、回答のほど宜しくおねがいます。 (https://books.google.co.jp/books?id=zPlFDwAAQBAJ&pg=PA208&lpg=PA208&dq=this.Left+%3D+e.X;&source=bl&ots=BxT0tTgdSQ&sig=lm2OWg3ENUztudWUJEuoGLUF7vE&hl=ja&sa=X&ved=0ahUKEwj97q39rcPZAhVHJpQKHbEwBdAQ6AEILjAB#v=onepage&q=this.Left%20%3D%20e.X%3B&f=false)
回答: こんにちは。 座標系の相違の問題です。 フォームのTop, Leftは通常はスクリーン座標系ですので原点は画面の左上です。 そして、FormFusen_MouseMoveで受け取るマウスの座標はFormFusen座標系ですので原点はFormFusenの左上です。その座標系を変換せずに直接設定しているため可笑しくなっているのだと思います。 例えば、フォームが(100, 200)にあり、マウスが(150, 260)の位置にある場合、FormFusen_MouseMoveで伝達されるマウス座標は(50, 60)になります。この状態でフォームを(50, 60)へ移動するとフォームは左上方向に吹っ飛びます。 ふっとんだ後、フォームは(50, 60)の位置にありますから、もしそのままFormFusen_MouseMoveイベントが発生した場合(マウスを動かさないと発生しませんが、簡単のためそのまま発生したと仮定します)、この時マウスは元の(150, 260)にあるので、FormFusen_MouseMoveで伝達されるマウス座標は(100, 200)となります。そして、フォームを(100, 200)へ移動すると、(50, 60)→(100, 200)へ吹っ飛びます。