как отложить действие мыши, введите прямоугольник c # - PullRequest
0 голосов
/ 26 сентября 2010

Я бы хотел отложить действие на несколько секунд после того, как указатель мыши вошел и оставался на некоторое время в графическом прямоугольнике winform.Какой способ сделать это?

Спасибо

c #, .net 2.0, winform

Ответы [ 4 ]

2 голосов
/ 26 сентября 2010
private Timer timer;
    private void rect_MouseEnter(object sender, EventArgs e)
    {
        timer = new Timer();
        timer.Interval = 3000;
        timer.Start();
        timer.Tick += new EventHandler(t_Tick);

    }

    private void rect_MouseLeave(object sender, EventArgs e)
    {
        timer.Dispose();
    }

    void t_Tick(object sender, EventArgs e)
    {
        timer.Dispose();
        MessageBox.Show(@"It has been over for 3 seconds");
    }
1 голос
/ 26 сентября 2010

Что-то типа:

    static void MouseEnteredYourRectangleEvent(object sender, MouseEventArgs e)
    {
        Timer delayTimer = new Timer();
        delayTimer.Interval = 2000; // 2000msec = 2 seconds
        delayTimer.Tick += new ElapsedEventHandler(delayTimer_Elapsed);
    }

    static void delayTimer_Elapsed(object sender, EventArgs e)
    {
        if(MouseInRectangle())
            DoSomething();

        ((Timer)sender).Dispose();
    }

Возможно, это можно сделать более эффективно, но должно работать: D

Два способа настроить MouseInRectangle -> один - заставить его получить текущие координаты мыши и положение элемента управления и посмотреть, находится ли он в нем; другим способом была бы переменная, которую вы установили бы в false на control.mouse_leave .

0 голосов
/ 26 сентября 2010

Обратите внимание, что System.Windows.Forms.Timer не является точным, и вы не можете полагаться, что он будет действовать именно на заданном интервале. было бы предпочтительнее использовать System.Times.timer и использовать действие Invoke для возврата к потоку GUI.

0 голосов
/ 26 сентября 2010

Попробуйте использовать элемент управления Timer (System.Windows.Forms.Timer).

...