【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秒後にマウスカーソルが消えました。少しでもマウスカーソルを動かすとまた表示されます。

以上となります。

ここまでお読みいただきありがとうございました。

C#

Posted by だゆう