【问题标题】:PreviewMouseLeftButtonUp event doesn't get called when mouse clicked鼠标单击时不会调用 PreviewMouseLeftButtonUp 事件
【发布时间】:2015-09-21 10:11:07
【问题描述】:

我有一个列表视图,我在其中显示对象及其状态和名称。该状态被一个按钮包围,当我单击它时,状态从活动变为非活动或相反。 现在我想在单击鼠标按钮时更改状态,并在鼠标按钮上升时将其更改回来。我的按钮必须触发“PreviewMouseLeftButtonDown”和“PreviewMouseLeftButtonUp”,如下面的代码所示。在 SendStateMessage() 方法中,状态被发送到 SCADA 服务器,服务器将新状态发回给我,GUI 编辑更改。

通常它不会产生任何问题,但是当我单击快速时,不会调用“PreviewMouseLeftButtonUp”事件。所以控制台上没有显示“MouseUp”。

我尝试在第一个 mouseDown 事件中调用 Task.Delay(),因为我认为该方法需要更多时间,但效果不佳。所以我想问你是否有人知道问题可能是什么以及如何解决这个问题。

感谢您的宝贵时间。

private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
     //_CurrentItem is an object of the class VM on which the click is executed.
     _CurrentItem = sender as FrameworkElement).DataContext as VM
     _CurrentItem.SendStateMessage();
}


private void Button_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
     Console.WriteLine("MouseUp");
}

编辑:

经过一段时间后,我有了另一个解决问题的想法,这也很有效。我只等待 MouseDownEvent,如果它被触发,我有一个循环,只要按下鼠标,我就会等待,当鼠标被释放时,我可以离开循环并在那里插入我想要在 MouseUPEvent 中执行的代码.

【问题讨论】:

  • 嘎嘎声像双击问题,你的sn-p对诊断问题没有帮助。
  • 感谢您的快速回答,但不是双击问题。您可以以不同的方式单击,或者单击鼠标按钮并按住它,或者您也可以非常快速地单击它,这就是我的问题。正如我所说,我认为服务器需要很长时间,因此不会触发事件。但我没有办法解决它。
  • 到我的代码 sn-p:在方法“SendStateMessage()”中,我向服务器发送一条消息,其中包含状态是否处于活动状态的信息,如这行代码:ScadaHMIService.SendUserMessage (new MsgUserModuleCommand("IO-Tool", ModuleUid, Enums.UserModuleCommands.Off));

标签: c# events button mouseevent


【解决方案1】:

您也可以等待 MouseDownEvent,如果它被触发,则创建一个循环,只要按下鼠标就等待,当鼠标释放时,您可以离开循环并在其中插入您想要执行的代码MouseUpEvent。

【讨论】:

    【解决方案2】:

    在我的例子中,另一个控件消耗了 mouseup 事件。所以我在最顶层的窗口级别捕获了 mouseup 事件。

    【讨论】:

      猜你喜欢
      • 2021-02-12
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      • 1970-01-01
      • 2011-05-30
      相关资源
      最近更新 更多