2011-06-16 58 views
1

所以我有一個按鈕,我試圖添加一個功能,使用System.Diagnostics.Stopwatch類似於快進或快退的按鈕。當我按住第二個按鈕,我想它做一些愚蠢的,就像這樣:試圖向c中的按鈕添加「快進」功能到一個按鈕#

private void button_MouseLeftButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     var stopWatch = Stopwatch.StartNew(); 
     if (stopWatch.ElapsedTicks < 1000) 
     { 
      lbl1.Content = "Quickpress"; 
     } 
     else if (stopWatch.ElapsedTicks >1000) 
     { 
      HAVE SOME ACTION HAPPEN HERE EVERY .5 SECONDS (how do i do it) 
     } 
    } 

現在,這是比什麼我想做的事情簡單得多,但如果用戶按下按鈕久時間,我想要一個行動每隔0.5秒發生一次,我該怎麼做?

mousedown事件觸發,它只是總是選擇短按,即使我按住按鈕。

回答

0

您需要重用現有的Stopwatch實例,方法是將其存儲在您班級的字段中。

2

RepeatButton可能是你正在尋找的東西,它會封裝週期性的行爲,但我不知道是否有辦法通過持有點擊來告訴短暫的點擊。

編輯︰在我看來,你仍然需要一個領域(嗯,你可以使用Tag)來說明狀態,例如,

<RepeatButton 
     Click="RepeatButton_Click" 
     PreviewMouseLeftButtonUp="RepeatButton_MouseLeftButtonUp" 
     Interval="500" Delay="1000" Content="Buton" /> 
int _clickCount = 0; 
private void RepeatButton_Click(object sender, RoutedEventArgs e) 
{ 
    if (_clickCount > 0) 
    { 
     // Repeated hold action 
    } 
    _clickCount++; 
} 

private void RepeatButton_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    if (_clickCount == 1) 
    { 
     // Short click action 
    } 
    _clickCount = 0; 
} 

(請注意,上面的代碼是遠遠乾淨,有點擊的邏輯問題,例如作爲復位應該對小鼠發生了,但只應如果執行短點擊動作鼠標仍然在按鈕上,因爲代碼現在將始終發生動作(如果滿足if條件))