【C#】特定のコントロールでマウスを停止させた時、数秒後にマウスカーソルを非表示とする
画像をフルスクリーンで見たい時等、マウスカーソルが邪魔な時がありますよね。
今回はC#の特定のコントロール上でマウスカーソルが一定時間停止した場合、マウスカーソルを非表示とする動きを実装します。
特定のコントロールでマウスを停止させた時、数秒後にマウスカーソルを非表示
今回使用した環境
インターネット接続可能のオンラインの環境
64 ビット オペレーティング システム
Windows 10 22H2
Visual Studio 2022 C# .NET Framework 4.8
フォームデザイン
フォームの真ん中にPictureBoxを「Dock = Fill」で配置しました。
数秒後にマウスカーソルを消すという動きを実装するため、タイマーも設置しています。
※今回はPictureBoxを例にしていますがフォームに配置できるコントロール全般で可能だと思います。
ソースコード
タイマーのインターバルを1秒に設定し、1秒ごとに「timer1_Tick」イベントでマウスカーソルが動かされていないかの判定を行っています。
マウス操作以外でPictureBoxが消えた ( キーボード操作やコントロールのRemove等 ) 場合にも対応しているつもりです。
public partial class Form1 : Form
{
// カーソルの位置 ( カーソルを消すかどうかの判断に使用 )
private Point _cursorPosition;
// カーソルを消すまでのカウント ( 秒 )
private int _cursorHideSeconds;
// カーソルの表示/非表示
private bool _isCursorShow = true;
public Form1()
{
InitializeComponent();
pictureBox1.ImageLocation = @"D:\work\keshiki.jpg";
timer1.Interval = 1000;
}
private void timer1_Tick(object sender, EventArgs e)
{
if (_cursorPosition.Equals(Cursor.Position))
{
// カーソルが動かされていない場合、カウント + 1
// 規定値 ( ここでは3秒 ) に達した場合、カーソルを非表示
_cursorHideSeconds += 1;
if (_cursorHideSeconds >= 3)
{
if (_isCursorShow)
{
Cursor.Hide();
_isCursorShow = false;
}
}
}
_cursorPosition = Cursor.Position;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (!_isCursorShow)
{
// カーソルが消えていた場合、カーソルを表示し、カウントを初期化する
Cursor.Show();
_cursorHideSeconds = 0;
_isCursorShow = true;
}
}
private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
timer1.Start();
}
private void pictureBox1_MouseLeave(object sender, EventArgs e)
{
timer1.Stop();
if (!_isCursorShow)
{
// カーソルが消えていた場合、カーソルを表示し、カウントを初期化する
Cursor.Show();
_cursorHideSeconds = 0;
_isCursorShow = true;
}
}
}
動作確認
PictureBoxでマウスカーソルを停止させます。
3秒後にマウスカーソルが消えました。少しでもマウスカーソルを動かすとまた表示されます。
以上となります。
ここまでお読みいただきありがとうございました。