2010-09-25 48 views

回答

1

的東西,如:

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 - >一個是讓它得到當前鼠標座標和控件的位置並查看它是否在其中,另一種方法是將一個變量設置爲control.mouse_leave上的false。

+0

雖然這是一個可以接受的答案,但重要的是要注意@Blam沒有配置在發送給false時創建的Timer對象。你應該((定時器)發送者).Dispose()釋放定時器分配的資源。 – Michael 2010-09-26 05:08:55

+0

你是對的 - 修好了。說實話,馬丁的一般情況更好:P – Blam 2010-09-26 09:25:14

0

嘗試使用Timer控制(System.Windows.Forms.Timer)。

2
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"); 
    } 
0

請注意System.Windows.Forms.Timer不是精確的,你不能依賴它將完全按照給定的時間間隔進行操作。 使用System.Times.timer並使用Invoke操作返回到GUI線程將會更好。