【问题标题】:Prevent Windows firing events during long touch of a button在长按按钮期间防止 Windows 触发事件
【发布时间】:2017-04-23 04:33:33
【问题描述】:

WinForms 应用程序。 用户触摸引起认证的按钮(触摸屏),屏幕(A)变为另一个屏幕(B)。如果用户继续在屏幕上按住手指(仅一秒钟),则屏幕 B 有一个与屏幕 (A) 上的按钮重叠的按钮,并且屏幕 B 上的按钮无意中被触摸并调用了一个不应该发生的动作发生...

如何防止这种情况发生?

【问题讨论】:

  • 但是如果用户在屏幕 A 上按住按钮,除非用户松开按钮,否则单击将永远不会触发。你不是这样吗?
  • 不,用户触摸屏幕并且不放手 - 表单更改为另一个(UserControl),在用户仍然触摸的地方有另一个按钮 - 这会产生“触摸/点击”在另一个按钮上...
  • 造成这种情况的事件是什么:在代码中是按钮的 clck 事件还是其他事件?
  • 在屏幕 A 上单击按钮时我有 button_Clicked 事件处理程序...

标签: c# winforms events touch touchscreen


【解决方案1】:

这是一种奇怪的行为。我没有触摸设备来测试这一点,但在常规情况下,click 仅在按下按钮时触发,然后在按钮仍处于焦点时释放。如果您按下按钮而不释放,click 事件将不会触发。

无论如何,也许您可​​以做的只是在按下按钮然后失去焦点时才显示屏幕 B。像这样:

private bool buttonIsClicked = false;
private void button1_Click(object sender, EventArgs e)
{
    this.buttonIsClicked = true;

}
private void button1_Leave(object sender, EventArgs e)
{
    if (this.buttonIsClicked)
    {
        this.buttonIsClicked = !this.buttonIsClicked;
        // show screen B
    }
}

请使用像我使用过的变量buttonIsClicked 这样Leave 事件处理程序中的代码不会在每次按钮失去焦点时执行,即使它没有被点击。

【讨论】:

  • 我会尝试的——我也在考虑类似的事情——问题是我也没有触摸屏——并且基于我客户的报告。我也在 MS 网站上找到了这个:点击屏幕并按住直到鼠标图标出现和消失。当用户意外按下并按住并想要恢复为仅点击时,用户可能会这样做。提起笔时发送 ISG_TAP。实际上我将无法按照您的建议进行操作:单击屏幕 A 会导致一系列事件和处理程序,而屏幕 B 仅在 Web 服务的特定响应成功时才会显示...
猜你喜欢
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-18
  • 1970-01-01
相关资源
最近更新 更多