【问题标题】:Remove possibility to trigger a button with a keyboard input消除使用键盘输入触发按钮的可能性
【发布时间】:2016-11-25 14:58:05
【问题描述】:

我有一个标准按钮,里面没有什么有趣的东西,而且一切正常:

private void Button_Click(object sender, EventArgs e)
{
    //Whatever, is not important what's in it
}

问题是,当我点击一个按钮时,如果之后我按下回车键或空格键,它会像点击它一样触发按钮。

我尝试弄乱这些属性,但也无济于事。 如何以(可能)简单的方式防止这种情况发生?

回答任何需要它的人(放在按钮内):

if (e is MouseEventArgs)
{
     //what you want in for the button to do
}

【问题讨论】:

  • 这是 WPF 还是 WinForms?
  • @Roma 它是 WinForms

标签: c# button input keyboard click


【解决方案1】:

您可以检查给定EventArgs 的类型,如果单击按钮eMouseEventArgs(并将包含有关单击的信息),否则只是EventArgs

private void button1_Click(object sender, EventArgs e)
{
    if (e is MouseEventArgs)
    {
        // Is mouse click
    }
    else
    {
        // Not mouse click...
    }
}

【讨论】:

  • 但是这里是事件处理程序的冗余调用。
  • @Roma 我没有调用任何方法
  • 但是当按下 ENTER 时,这个事件处理程序会做一些工作。您可以禁用按钮的选项卡,此按钮不会触发此事件处理程序
  • @Roma 我只有一个操作,我想我不会有任何问题。
  • @JackIta,这不是问题,此解决方案将按您的预期工作。此解决方案可以更好地以不同方式处理鼠标和键盘单击。但在你的情况下,键盘被忽略了。如果此解决方案对您有用,那就太好了)
【解决方案2】:

虽然 Matteo Umili 提供了一个有效的解决方案,但我想我会分享这个解决方案,以防有人发现它有用:

只需将焦点从按钮移到另一个控件即可。此解决方案需要另一个控件来切换焦点。在我的示例中,我使用的是标签。

    private void button2_Click(object sender, EventArgs e)
    {
        label1.Focus();
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2020-02-19
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多