【问题标题】:trying to add a "fast forward" like function to a button in c#试图在 C# 中的按钮上添加类似“快进”的功能
【发布时间】:2011-06-16 00:32:20
【问题描述】:

所以我有一个按钮,我正在尝试将使用System.Diagnostics.Stopwatch 的功能添加到类似于快进或快退的按钮。当我按住按钮一秒钟时,我希望它做一些愚蠢的事情,就像这样:

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 事件触发,它总是选择短按,即使我按住按钮。

【问题讨论】:

    标签: c# wpf xaml button


    【解决方案1】:

    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当然满足条件))

    【讨论】:

      【解决方案2】:

      您需要通过将现有的Stopwatch 实例存储在类的字段中来重用它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-14
        • 2016-07-17
        • 1970-01-01
        • 2010-12-12
        • 2020-07-31
        • 2023-03-15
        • 2018-03-05
        • 2014-02-19
        相关资源
        最近更新 更多