マウスをしばらく動かさずにいると、マウスカーソルを消したい。
マウスカーソルの表示/非表示は、System.Windows.Forms.CursorクラスのShow/Hideメソッドを使えばよい。
秒数管理は、System.Windows.Forms.Timerクラスを使う。
※注意点
Cursorクラスは内部にShow/Hideメソッドを呼んだカウントを持っており、それを見て表示/非表示を制御しています。
例えば、Hideメソッドを2回呼んだら、Showメソッドも2回呼ぶまで、カーソルは表示されません。
つまりShow/Hideメソッドを呼んだ回数が対応していないと、期待通りに表示/非表示できません。
また、マウスが動いた時にカーソルを再表示させるのに、MouseMoveイベントを使うのですが、
マウスが動いていない場合でも、MouseEventが呼ばれることがあるので、
カーソルの前回位置を覚えておいて、今回位置と比べて位置が同じなら再表示しないようにします。
以下、Form1上で、4秒間マウスを動かさないと、マウスカーソルを非表示にするコード
public partial class Form1 : Form { private readonly Timer cursorTimer; // カーソルを隠すためのタイマー private const int HIDE_CURSOR_TIME = 4000; // カーソルを隠すミリ秒数 private bool isHiddenCursor; // カーソルが隠れているか private Point previousPoint; // 前回のカーソル位置 public Form1() { InitializeComponent(); // これはVisual Studioが自動生成したコード this.isHiddenCursor = false; this.previousPoint = Cursor.Position; // カーソルを隠すためのタイマー生成 this.cursorTimer = new Timer(); this.cursorTimer.Interval = HIDE_CURSOR_TIME; // タイマーイベント this.cursorTimer.Tick += (sender, e) => { this.cursorTimer.Stop(); if (!this.isHiddenCursor) { // カーソルが隠れていない時のみ、カーソルを隠す Cursor.Hide(); this.isHiddenCursor = true; } }; // マウス移動イベント this.MouseMove += (sender, e) => { if (this.previousPoint == Cursor.Position) { // 前回と今回のカーソル位置が同じ場合は何もしない return; } this.previousPoint = Cursor.Position; this.cursorTimer.Stop(); if (this.isHiddenCursor) { // カーソルが隠れている時のみ、カーソルを表示する Cursor.Show(); this.isHiddenCursor = false; } this.cursorTimer.Start(); }; this.cursorTimer.Start(); } }