トップ回答者
ToolTip と MouseMove の怪しい関係?

質問
-
環境:
Visual Studio 2008 SP1 /.NET Framework 3.5 SP1
Visual Studio 2010 /.NET Framework 4.0WindowsForms で動的に ToolTip のキャプションを設定するよう実装してるうち、おかしな挙動を発見しました。
フォームに TextBox と ToolTip を追加し、TextBox の MouseMove イベントを以下のように実装します。
Public Class Form1 Private _count As Decimal = 0D Private Sub TextBox1_MouseMove( _ ByVal sender As System.Object, _ ByVal e As System.Windows.Forms.MouseEventArgs) Handles TextBox1.MouseMove If (_count = Decimal.MaxValue) Then _count = 0D _count += _count + 1 TextBox1.Text = _count.ToString() ToolTip1.SetToolTip(TextBox1, _count.ToString()) End Sub End Class
この MouseMove、XP /SP3 の場合、マウスカーソルの位置を TextBox 上で停止すると MouseMove イベントは実行されません。しかし Windows 7 の場合、マウスカーソルの位置を TextBox 上で停止しても MouseMove イベントが発生し続けます。
しかしToolTip1.SetToolTip(TextBox1, _count.ToString())
の一行をコメントアウトすると、マウスカーソルの位置を TextBox 上で停止すれば、Windows 7でも MouseMove イベントが停止します。
一応 C# で試しても状況は変わりませんでした。XP /SP3 はマウスを停止していると MouseMove イベントは発生せず。ただし Windows 7 の場合、マウスを停止しても MouseMove イベントは発生し続けます。
これってもしかしてバグ?それとも ToolTip もしくは MouseMove の仕様かどうか、ご存知の方はおられるでしょうか?
ひらぽん http://d.hatena.ne.jp/hilapon/- 編集済み ひらぽんModerator 2010年11月11日 7:05 コードの修正。でも修正するとレイアウト崩れますね(^ω^;
回答
-
これだとは思うのですが、
MouseMove event continuously invoked on Vista Ultimate x64 | Microsoft Connect
http://connect.microsoft.com/VisualStudio/feedback/details/244426/mousemove-event-continuously-invoked-on-vista-ultimate-x64
せっかく _point を宣言したのに、e.Location を代入していないような...- 回答としてマーク ひらぽんModerator 2010年11月11日 7:09
すべての返信
-
これだとは思うのですが、
MouseMove event continuously invoked on Vista Ultimate x64 | Microsoft Connect
http://connect.microsoft.com/VisualStudio/feedback/details/244426/mousemove-event-continuously-invoked-on-vista-ultimate-x64
せっかく _point を宣言したのに、e.Location を代入していないような...- 回答としてマーク ひらぽんModerator 2010年11月11日 7:09
-
これだとは思うのですが、
MouseMove event continuously invoked on Vista Ultimate x64 | Microsoft Connect
http://connect.microsoft.com/VisualStudio/feedback/details/244426/mousemove-event-continuously-invoked-on-vista-ultimate-x64
せっかく _point を宣言したのに、e.Location を代入していないような...
ありがとうございます。仕様ですか、そうですか・・・(´・ω・`)
結局ポイントを保持して比較するしかないのね。> せっかく _point を宣言したのに、e.Location を代入していないような...
直したつもりがゴミが残ってました。質問のコードは修正しておきましたです。orz
ひらぽん http://d.hatena.ne.jp/hilapon/