分類:[VB.NET/VB2005] 
2007/09/21(Fri) 13:04:53 編集(投稿者)
質問させていただきます VB2005 Express Editin, windows XP
Public Class Form1
    Private Pflg As Boolean = False
    Private cnt As Integer = 0
    Private x As Integer = 10
    Private Sub Form1_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
        Pflg = True
    End Sub
    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        If Pflg Then
            Label1.Text = cnt
            cnt += 1
            x += 1 : If 200 < x Then x = 10
            ' Label1.Left = x   '<---AA
        End If
    End Sub
    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        Pflg = False
    End Sub
End Class
MouseMoveが発生したら、Label1.Text = cnt で、発生回数を表示します。
このソースは思ったように動きます。で、<---AAのコメントを外したら、マウスを押したまま、マウスを少し
動かしてから次に動かさないでもCPU100%となり、離すまでMouseMoveが連続発生するのです。
つまり、Label1.Left = x とコントロールを操作したら、マウスの位置は変わらないのにMouseMoveが連続発生です。
(実際は、control Classを作り、TextBoxのようなことをしたいとテストしているのですが、そこでマウスで文字列を
選択するのにドラッグしたらCPU100%となったのですが、再現する最小コードとして上のようにしました)
対策としてはe.Locationで変わったことを判断すればいいです。が、
質問といたしまして、どうして、マウスの位置は変わらないのにMouseMoveが連続発生するのでしょうか?
何かきつねにつままれたような・・オバカな疑問かも知れないのですが先輩諸氏のご教授をお願いいたします。