秒表没有停止

阿尔瓦罗·加西亚(Alvaro Garcia)

我想控制用鼠标单击时用户是单击还是双击。所以我使用这段代码:

private void MouseSingleClickCommand(RoutedEventArgs e)
{
    _dtMouseClick.Start();
}


private void MouseClick_Tick(object sender, System.EventArgs e)
{
    _dtMouseClick.Stop();

    //my one click code
}



private void MouseDoubleClickCommand(MouseButtonEventArgs e)
{
    _dtMouseClick.Stop();
    //code of the double click
}

_dt是在视图模型的构造函数中创建的DispatcherTimer:

_dtMouseClick =
                new System.Windows.Threading.DispatcherTimer(
                new TimeSpan(0, 0, 0, 0, 200),
                System.Windows.Threading.DispatcherPriority.Background,
                MouseClick_Tick,
                System.Windows.Threading.Dispatcher.CurrentDispatcher);

但是,一键执行的代码始终会执行,因为调度程序不会停止。

为什么?。

谢谢。

编辑:我包括按钮的axml:

<StackPanel Height="Auto" HorizontalAlignment="Left" Margin="548,0,0,0" Name="stpBotnoesBasicos" VerticalAlignment="Top" Width="Auto">
                    <Button Content="Buscar" Height="23" Name="btn01" Width="75">
                        <i:Interaction.Triggers>
                            <i:EventTrigger EventName="Click">
                                <cmd:EventToCommand Command="{Binding MouseSingleClickCommand}" PassEventArgsToCommand="True"/>
                            </i:EventTrigger>

                                <i:EventTrigger EventName="MouseDoubleClick">
                                <cmd:EventToCommand Command="{Binding MouseDoubleClickCommand}" PassEventArgsToCommand="True"/>
                                </i:EventTrigger>
                            </i:Interaction.Triggers>
                    </Button>
</Stackpannel>
阿尔瓦罗·加西亚(Alvaro Garcia)

此解决方案基于另一个问题的解决方案:

基本解决方案

如果我使用PreviewMouseLeftButtonDown来控制单击或双击的工作时间,而不是使用两个事件(单击和双击)。

所以我用下面的代码解决了这个问题:

第一种方法用鼠标控制点击。

private void MouseLeftButtonDownCommand(MouseButtonEventArgs e)
        {

            if (e.ClickCount == 1)
            {
                _dtMouseClick.Start();
            }

            else if(e.ClickCount > 1)
            {
                _dtMouseClick.Stop();

                //the code of the double click
            }
        }

此方法是链接到DispatcherTimer的方法,如果没有在第二次单击鼠标时停止,则执行该方法。

private void MouseClick_Tick(object sender, System.EventArgs e)
        {
            _dtrMouseClick.Stop();

            //code of the single click                
        }

dispatcherTimer是在视图模型的构造函数中创建的

_dtBotonBuscarMouseClick =
                new System.Windows.Threading.DispatcherTimer(
                new TimeSpan(0, 0, 0, 0, 250),
                System.Windows.Threading.DispatcherPriority.Background,
                MouseClick_Tick,
                System.Windows.Threading.Dispatcher.CurrentDispatcher);
            _dtMouseClick.Stop();

间隔为250毫秒,即用户必须双击的时间间隔。

在此解决方案中,我使用相同的方法来停止dispatcherTimer的stop()方法,但是由于某些原因,如果我使用两个事件(click和mouseDoubleClick),双击中的dispatcherTimer不会停止,并且如果我使用MouseLeftButtonDown解决方案有效的情况下。

编辑

对我来说,这种解决方案可以正常工作。

在MouseLeftButtonDown事件中,我检查ClickCount是1还是2。如果计数是1,则启动计时器。因此,如果之前没有停止,则计时器将执行其代码。

如果第二次单击是双击,计时器将停止。这是ClickCounter> 1的时间。如果单击之间的间隔时间足够长,则clickcounter始终为1,因此,此事件MouseLeftButtonDown控制何时双击。

当执行计时器时,首先我要停止它,因为我想执行一次它的代码,而我想要的代码只需单击一下即可。

如果我双击,那么我会在达到间隔之前停止计时器,因此永远不会执行,并双击执行我想要的代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章