为什么Enter和Space键的按钮行为不同?

时间:2013-04-18 18:33:09

标签: c# winforms

据我所知,这些是按钮具有焦点时唯一的反应键。

立即按 Enter 点击'按钮,即使你按下键也是如此。 (所以'点击'发生在KeyDown上)。

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

为何与众不同?我想要一篇关于这个主题的好文章,或者仅仅是关于为什么这两个键具有不同行为的逻辑解释。当然,那里有一个解释!

2 个答案:

答案 0 :(得分:6)

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

输入密钥经典AcceptButton的行为类似于FullClick(Click / ClickReleased),这就是为什么如果你持有它就会有多次点击的效果。

空格然而是SingleClick(在你发布密钥之前没有点击发布)所以它可以完成只需要Click而没有ClickRelease的任务和只需要选择控件来激活它的动作。就像使用 Enter 无法激活的CheckBoxRadioButtons一样,但是可以使用 Space 激活,就像点击它一样。

总之, Space 将是官方MouseClick,因为它具有MouseClick按下或释放的相同效果。 输入将是一键完全点击的快捷方式。当然,所有这些都是为键盘本身提供更多可能性的想法。

答案 1 :(得分:3)

你会看到两种不同的行为,除了它们都处理winform上的键盘事件之外没有关联。

输入是特殊的,因为它是激活表单acceptButton的按键。事实上,你错过了另一个可能影响按钮的键: Esc cancelButton,也会抛出事件。

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

部分的内容

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