2012-09-14 46 views
4

我想捕捉用戶單擊並將鼠標放在C#中的控件上的事件。如何捕捉事件Mouse Hold on a control?

我已閱讀MSDN,我只看到事件Mouse Down,Mouse Up,...但沒有Move Hold事件。

+1

http://stackoverflow.com/questions/6623775/ c-sharp-hold-down-mouse-event –

回答

5

你需要在它們之間用一些定時器來使用精視事件。

實施例:

  • 的MouseDown
    • 啓動計時器
  • 的MouseUp
    • 禁止定時器

如果用戶持有的時間多於計時器時間 - 調用您的事件處理程序,當mouseUp發生得更快然後計時器已過時 - 禁用runned timer。

+0

謝謝,使用定時器是好的^。^ – TTGroup

+0

我沒有想到,請你解釋一下吧? –

+0

您需要創建'Timer'對象並訂閱答案中提到的事件。當'MouseDown'事件觸發時 - 當'MouseUp'觸發並且定時器仍在處理中時,您需要啓動計時器 - 執行您的操作,否則 - 釋放您的計時器。 – Samich

-1

首先,您應該使用秒錶來檢測您想要的時間。

using System.Diagnostics; 

其次,定義一個秒錶類的全局實例。

Stopwatch s = new Stopwatch(); 

這是第一個事件,你應該使用:

private void controlName_MouseDown(object sender, MouseEventArgs e) 
{ 
    s.Start(); 
} 

這是你應該使用第二個事件:

private void controlName_MouseUp(object sender, MouseEventArgs e) 
{ 
    s.Stop(); 
    //determine time you want . but take attention it's in millisecond 
    if (s.ElapsedMilliseconds <= 700 && s.ElapsedMilliseconds >= 200) 
    { 
     //you code here. 
    }   
    s.Reset();   
} 
+0

該解決方案對於創建鼠標暫停事件並不合適。如果用戶按住鼠標一段時間,但只有在釋放鼠標之後才能解決問題。那太晚了。如果用戶將鼠標停下一小時,該怎麼辦?什麼都沒發生。這是一個糟糕的用戶體驗。 – Enigmativity

+0

這取決於你想要做什麼..如果你不想確定一個特定的時間,你可以更改如果語句或刪除它.. –