2011-06-16 52 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条件))