我開發的軟件,增加了如果一個按鈕被點擊5次,一個變量由「1」如何檢查事件是否發生在C#的時間範圍內?
IF遞增那麼B ++
一切都是美好的,但現在我想的系統重置其計數器如果那5次在10秒內沒有發生。即點擊速度問題。
如果我點擊速度太慢,即使點擊了5次,因爲它超過了10秒,增量也不應該發生。
有什麼建議嗎?
我開發的軟件,增加了如果一個按鈕被點擊5次,一個變量由「1」如何檢查事件是否發生在C#的時間範圍內?
IF遞增那麼B ++
一切都是美好的,但現在我想的系統重置其計數器如果那5次在10秒內沒有發生。即點擊速度問題。
如果我點擊速度太慢,即使點擊了5次,因爲它超過了10秒,增量也不應該發生。
有什麼建議嗎?
可以這樣做更漂亮,但它應該工作:
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++;
}
我會做這樣的事情:
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可能不會觸發正確的次數。
添加一個計時器。每10秒鐘打一次。在tick事件處理程序中,檢查點擊次數是否可以被5整除。如果沒有,則重置它。 –
基本上,您想要跟蹤按鈕第一次點擊的時間,然後在您最後一次點擊發生時針對該變量進行檢查。但實際上,您想要記錄點擊「5次點擊前」時的情況,因此您需要有關每次點擊的信息。 –
'計時器'是給定的。根據您的技能水平,您可能還想查看[觀察者模式](http://www.dofactory.com/net/observer-design-pattern)。 –