Скрыть курсор, если вы не двигаетесь в течение определенного времени, и снова показывать его на ходу - PullRequest
0 голосов
/ 02 июля 2018

Я хочу скрыть курсор через определенное время (если мышь не движется), и я хочу показать курсор, когда я перемещаю мышь в окне рисунка. Я просто не могу заставить его работать ... Вот что я попробовал:

    // this Never seem to hide the cursor
    private void picBox_MouseMove(object sender, MouseEventArgs e)
    {
        Cursor.Show();
        tim.Stop();
        tim.Start();
    }
    private void tim_Tick(object sender, EventArgs e)
    {
        Cursor.Hide();
        tim.Stop();
    }

-

    // works but in this case I want cursor.ico to be a resource
    private void picBox_MouseMove(object sender, MouseEventArgs e)
    {
        Cursor.Current = Cursors.Default;
        tim.Stop();
        tim.Start();
    }
    private void tim_Tick(object sender, EventArgs e)
    {
        Cursor.Current = new Cursor("cursor.ico");
        tim.Stop();
    }

-

    // Properties.Resources.cursor gives an error even though I added it to my resources
    // cannot convert from 'System.Drawing.Icon' to 'System.IntPtr'
    private void picBox_MouseMove(object sender, MouseEventArgs e)
    {
        Cursor.Current = Cursors.Default;
        tim.Stop();
        tim.Start();
    }
    private void tim_Tick(object sender, EventArgs e)
    {
        Cursor.Current = new Cursor(Properties.Resources.cursor);
        tim.Stop();
    }

1 Ответ

0 голосов
/ 02 июля 2018

Вам нужно иметь таймер и обрабатывать его Tick событие. В событии Tick проверьте, было ли последнее движение мыши раньше определенного времени, затем скройте курсор, используя Cursor.Hide(). Также обработайте MouseMove из PictureBox и покажите курсор, используя метод Cursor.Show().

Примечание: Не забудьте включить таймер и установить для Interval таймера короткое значение, например 300, и изменить значение duration в следующем коде для более короткого значения / дольше неактивного времени:

DateTime? lastMovement;
bool hidden = false;
int duration = 2;
void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
    lastMovement = DateTime.Now;
    if (hidden)
    {
        Cursor.Show();
        hidden = false;
    }
}
private void timer1_Tick(object sender, EventArgs e)
{
    if (!lastMovement.HasValue)
        return;
    TimeSpan elaped = DateTime.Now - lastMovement.Value;
    if (elaped >= TimeSpan.FromSeconds(duration) && !hidden)
    {
        Cursor.Hide();
        hidden = true;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...