分類:[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が連続発生するのでしょうか?
何かきつねにつままれたような・・オバカな疑問かも知れないのですが先輩諸氏のご教授をお願いいたします。