tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルマウスを早く動かした場合にイベントが発生しない
記事No10769
投稿日: 2012/04/03(Tue) 17:42
投稿者かず
VB2005を使っていてLabelの上をマウスが通過した場合にMouseMoveイベントで処理を行うプログラムを作成してますが、マウスを早く動かした場合にイベントが発生しません。
これをどんなに早く動かしてもLabel上を通過した場合にイベントを発生させる方法はありませんか?

[ツリー表示へ]
タイトルRe: マウスを早く動かした場合にイベントが発生しない
記事No10770
投稿日: 2012/04/03(Tue) 23:57
投稿者shu
可能性がなくはない気がしますが、簡単に再現出来ません。
どんなコードを書かれていますか?

[ツリー表示へ]
タイトルRe^2: マウスを早く動かした場合にイベントが発生しない
記事No10771
投稿日: 2012/04/04(Wed) 09:27
投稿者かず
早速のご返事ありがとうございます。

フォーム上にlabel1〜label5を貼り付けておりマウスがそこを通過したら色を赤に変更していく処理なんですがマウスをゆっくり動かしていくとイベントをとれますが早く移動すると以下のイベントが発生しない状態です。

どうぞよろしくお願い致します。
    
Private Sub label1_MouseMove(ByVal sender As Object, ByVal e As       System.Windows.Forms.MouseEventArgs) Handles label1.MouseMove
         Me.label1.BackColor = Color.red
    End Sub

[ツリー表示へ]
タイトルRe^3: マウスを早く動かした場合にイベントが発生しない
記事No10772
投稿日: 2012/04/04(Wed) 16:42
投稿者魔界の仮面弁士
> 以下のイベントが発生しない状態です。

座標データは、必ずしも連続した点を指し示すわけではありません。

たとえば、
  Private Sub PictureBox1_MouseMove(ByVal sender As Object, _
    ByVal e As MouseEventArgs) Handles PictureBox1.MouseMove
        ListBox1.Items.Insert(0, e.Location.ToString())
  End Sub
のようなコードを実行してみると分かりますが、素早く動かすと、
途中の座標が通知されていないことがわかります。


途中の座標が抜け落ちる可能性がある以上、たとえば
移動前と移動後の座標を調べるようにして、その二点間に
含まれるラベルを着色することで対応されては如何でしょう。



> ゆっくり動かしていくとイベントをとれますが
マウスを一定距離移動させたとしても、別PCで実施すると
カーソル移動距離が異なってしまう事がありますよね。

マウスを同じ距離を動かしたとしても、実際のカーソル移動距離は
(1) コントロールパネルのマウス速度設定(MouseSensitivity および MouseSpeed)
(2) マウスの分解能(解像度)… DPI (Dots Per Inch) とか CPI (Counts Per Inch) とか
(3) マウスのスキャン速度(サンプリングレート)
などに左右されるためです。(数字が大きいほど大きく移動)

その上、OS 側のメッセージ通知処理の発生頻度も関係してくるため、たとえ
高級マウスであっても、MouseMove ではどうしても座標の抜けが発生します。

一応、DirectInput という技術を使うことで通知頻度を向上させることは
できるかと思いますが、やはり取りこぼしを防げるわけではありません。
(なお DirectInput で取得できる値は、画面座標では無く相対移動距離です)

[ツリー表示へ]
タイトルRe^4: マウスを早く動かした場合にイベントが発生しない
記事No10773
投稿日: 2012/04/04(Wed) 17:38
投稿者かず
魔界の仮面弁士さん

丁寧がご説明ありがとうございます。

なるほど移動前と移動後の2点間をみるんですね頭柔らかくして考えないとだめですね。
試しにやってみます。

マウスの件もいろんな絡みがあるんですね。勉強になります。

また、つまづいたらご相談させて下さい。

[ツリー表示へ]