C# 排除使用键盘输入触发按钮的可能性

C# 排除使用键盘输入触发按钮的可能性,c#,button,input,keyboard,click,C#,Button,Input,Keyboard,Click,我有一个标准按钮,没有任何有趣的东西,而且一切都很完美: private void Button_Click(object sender, EventArgs e) { //Whatever, is not important what's in it } 问题是,当我点击一个按钮时,如果之后我按下例如回车键或空格键,它会像我点击它一样触发该按钮 我试图弄乱房子,但也无济于事。 我如何以一种(可能的)简单的方式防止这种情况发生 为任何需要它的人解答(放入按钮内): 您可以检查给定的Ev

我有一个标准按钮,没有任何有趣的东西,而且一切都很完美:

private void Button_Click(object sender, EventArgs e)
{
    //Whatever, is not important what's in it
}
问题是,当我点击一个按钮时,如果之后我按下例如回车键或空格键,它会像我点击它一样触发该按钮

我试图弄乱房子,但也无济于事。 我如何以一种(可能的)简单的方式防止这种情况发生

为任何需要它的人解答(放入按钮内):


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

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

虽然Matteo Umili提供了一个有效的解决方案,但我认为如果有人认为这个解决方案有用,我会与大家分享:

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

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

这是WPF还是WinForms?@Roma这是WinFormsB,但这里是对事件处理程序的冗余调用。@Roma我不调用任何方法,但当按下ENTER键时,此事件处理程序会执行一些操作。您可以禁用按钮的制表符,此按钮不会触发此事件handler@Roma我只有一个操作在里面,我想我不会有任何问题。@JackIta,这不是问题,这个解决方案会像你期望的那样工作。这个解决方案将更好地处理鼠标和键盘点击在不同的方式。但在您的情况下,键盘被忽略。如果此解决方案适合您,那就太好了)
    private void button2_Click(object sender, EventArgs e)
    {
        label1.Focus();
    }