いくつかの Application.Idle ハンドラーを使用してフォーム上のコントロールのステータスを変更する Windows フォーム アプリケーションがあります。
ListView をフォームに追加した後、マウス カーソルが ListView の上にあるときに Idle-Handlers が頻繁に呼び出されることに気付きました。Spy++ を使用すると、マウス カーソルがコントロール上にある (動かない) ときに、コントロールが WM_MOUSEHOVER メッセージを受け取り、それがアイドル イベントをトリガーすることがわかりました (メッセージ キューが空になった後)。同じことが TreeView-Controls にも当てはまります。
どうすればこの動作を無効にできますか?
コマンド プロンプトからこのコードを実行すると、意味が表示されます。
using System;
using System.Windows.Forms;
public class IdleTest {
public static void Main() {
Application.Idle += delegate {
Console.WriteLine(
DateTime.Now.ToString() + " idle!" ) ;
};
Form f = new Form(){ Width=300 };
f.Controls.Add(new ListView(){ Left=0, Width=100 } );
f.Controls.Add(new TreeView(){ Left=100, Width=100 } );
f.Controls.Add(new TextBox() { Left=200, Width=100 } );
Application.Run(f) ;
}
}