2015-04-12 67 views
0

我開發的軟件,增加了如果一個按鈕被點擊5次,一個變量由「1」如何檢查事件是否發生在C#的時間範圍內?

IF遞增那麼B ++

一切都是美好的,但現在我想的系統重置其計數器如果那5次在10秒內沒有發生。即點擊速度問題。

如果我點擊速度太慢,即使點擊了5次,因爲它超過了10秒,增量也不應該發生。

有什麼建議嗎?

+1

添加一個計時器。每10秒鐘打一次。在tick事件處理程序中,檢查點擊次數是否可以被5整除。如果沒有,則重置它。 –

+0

基本上,您想要跟蹤按鈕第一次點擊的時間,然後在您最後一次點擊發生時針對該變量進行檢查。但實際上,您想要記錄點擊「5次點擊前」時的情況,因此您需要有關每次點擊的信息。 –

+0

'計時器'是給定的。根據您的技能水平,您可能還想查看[觀察者模式](http://www.dofactory.com/net/observer-design-pattern)。 –

回答

0

可以這樣做更漂亮,但它應該工作:

DateTime time = new DateTime();//time of first click 
int counter = 0; 

void button_click(object sender, EventArgs e) 
{ 
    if(counter == 0) 
    {time = DateTime.Now} 
    else if(counter == 5) 
    { 
     if(DateTime.Now.Subtract(time).Duration().Seconds <= 10) 
     {/*Do some cool stuff*/} 
     else 
     {counter = -1;} 
    } 
    counter++; 
} 
0

我會做這樣的事情:

const int ClicksRequired = 5; 
readonly TimeSpan ClickTimeSpan = new TimeSpan(0, 0, 10); 

Queue<DateTime> _clicks = new Queue<DateTime>(); 

private void clickTarget_MouseUp(object sender, MouseEventArgs e) 
{ 
    var currentTime = DateTime.Now; 
    _clicks.Enqueue(currentTime); 

    if (_clicks.Count == ClicksRequired) 
    { 
     var firstTime = _clicks.Dequeue(); 
     if (currentTime - firstTime <= ClickTimeSpan) 
     { 
      MessageBox.Show("Hello World!"); 
      _clicks.Clear(); 
     } 
    } 
} 

我使用隊列保持點擊跟蹤,因爲你不知道哪個鼠標點擊實際上是第一次點擊,直到您在時間窗口中點擊五次。您需要及時知道第五次點擊的時間,並且點擊每次後續點擊都會發生變化。

我使用MouseUp而不是Click,因爲如果點擊發生在系統雙擊時間間隔內(因爲它們被路由到DoubleClick),Click可能不會觸發正確的次數。

相關問題