【问题标题】:Why do Enter and Space keys behave differently for buttons?为什么 Enter 和 Space 键对按钮的行为不同?
【发布时间】:2013-04-18 18:33:09
【问题描述】:

据我所知,这些是唯一在按钮获得焦点时做出反应的键。

按下 Enter 会立即“点击”按钮,即使您按住它也是如此。 (所以“点击”发生在 KeyDown 上)。

Space 更像是普通的鼠标点击;按住它不会激活 Click 事件,但一旦释放它就会激活。 (所以“点击”发生在 KeyUp 或 KeyPressed 上。)

为什么不一样?我想要一篇关于这个主题的好文章,或者只是一个关于为什么这两个键有不同行为的合乎逻辑的解释。肯定有解释!

【问题讨论】:

  • Enter 是接受,Esc 是拒绝,空格键是按下焦点按钮。因此,如果默认按钮是 OK,当您按下 Enter 时,您实际上接受了更改而不是按下按钮。
  • MessageBox 的情况是错误的。 Enter 和 Space 都单击焦点按钮,但具有上述行为。
  • 在消息框上,确定按钮具有焦点,所以正如我所说。重点是点击空格键,回车是接受消息框,esc是拒绝并关闭。
  • 您忘记了MessageBox 的按钮,例如确定和取消、是和否。当您按下回车键时,带有焦点的按钮(假设是 CANCEL)将被激活,从而取消并关闭。
  • 您可以通过以下方式将您的选择按钮移动到另一个按钮:AnotherButton.Select();

标签: c# winforms


【解决方案1】:

我找不到任何解释这一点的文章,这是一个非常好的问题。我个人认为这是出于功能目的

Enter Key经典的AcceptButton就像FullClick (Click/ClickReleased) 这就是为什么如果你按住它就会有点击多次的效果。

Space 然而是一个SingleClick(在你释放键之前没有点击释放)所以它可以完成在没有ClickRelease的情况下只需要Click的任务和只有需要选择一个控件来激活它。就像CheckBoxRadioButtons 一样,它们不能用Enter 激活,但可以用Space 激活,就像你点击它一样。

总之,Space 将是官方的MouseClick,因为它与按下或释放时的MouseClick 具有相同的效果。 Enter 是一种单击完整单击 的快捷方式。当然,所有这些都是为了给键盘本身提供更多可能性。

【讨论】:

    【解决方案2】:

    您会看到两种不同的行为,它们没有关联,只是它们都处理 winform 上的键盘事件。

    Enter 很特别,因为它是激活表单的acceptButton 的按键。事实上,您错过了另一个可以影响按钮的键:EsccancelButton,也会引发事件。

    正如 PhaDaPhunk 解释的那样,Space 是任何接受 MouseClick 的组件的MouseClick,但我还没有找到它的详细解释。我认为这是所有控件的默认行为。 accessibility 的 Microsoft 指南似乎在他们关于 基于键盘的导航

    的部分中暗示了这一点

    顺便说一句,这个Microsoft support knowledge base entry 似乎表明空格键的实现从 Button.Click 变为 Button.MouseClick。也许这就是它行为不同的原因。

    【讨论】:

    • 是否有可能在 MessageBox 只有一个 OK 按钮的情况下, esc 激活右上角的 X ? (我不知道如何格式化键盘键)
    • 重新格式化键,我发现了如何通过编辑您的帖子然后取消来做到这一点。显然,它是 Key。至于你的问题,这似乎是正确的,但我必须进一步研究。该表单有一个可设置的 cancelButton 字段。
    • 我会接受你的回答,因为它是彻底的,但我相信它并不准确。如果带有 MessageBoxButtons.OKCancel 按钮的 MessageBox 将焦点放在它的取消按钮上,Enter 将激活取消按钮。
    • stackoverflow.com/questions/1769951/… 谈到了 x 和 cancelButton 之间的关系,但在没有设置 cancelButton 时没有回答您关于 Esc 的问题。看到这一点的最好方法是做一个基本的实验然后看看。我为acceptButton 提及panel 是不准确的。我将其更改为form,我不确定MessageBox是否算作表单。
    • @tijizor 绝对正确。 EnterSpace 单击活动的焦点按钮。您可以移动方向键或通过单击另一个按钮但释放按钮的单击来移动该焦点。
    【解决方案3】:

    此功能似乎已在 Big Sur 中删除。我来这里是为了寻找如何找回它。在大多数对话框按钮上选择两个主要选项可能非常有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      相关资源
      最近更新 更多