マウスをしばらく動かさずにいると、マウスカーソルを消したい。
マウスカーソルの表示/非表示は、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();
}
}