Подтвердить что ты не робот

Почему клавиши ввода и пробела ведут себя по-разному для кнопок?

Насколько я знаю, это единственные ключи, которые реагируют, когда кнопка фокусируется.

Нажатие Enter мгновенно "нажимает" кнопку, даже если вы держите ее нажатой. (Таким образом, 'click' происходит в KeyDown).

Нажатие Space действует скорее как обычный щелчок мыши; удерживание его не активирует событие Click, но это происходит, как только вы его отпустите. (Таким образом, 'click' происходит на KeyUp или KeyPressed.)

Почему разница? Мне нужна хорошая статья по этому вопросу или просто логическое объяснение того, почему эти два ключа имеют другое поведение. Конечно, есть объяснение!

4b9b3361

Ответ 1

Я не могу найти статей, объясняющих это, и это действительно хороший вопрос. Я лично считаю, что это для функциональных целей

Enter Key классический AcceptButton действует как FullClick (Click/ClickReleased), поэтому если вы его удерживаете, вы будете иметь эффект нажатия нескольких раз.

Space однако SingleClick (без релиза ключа не отпускается клик), поэтому он может выполнять задачу, где требуется только <Click без ClickRelease и действий, где только выбор элемента управления требуется для его активации. Как и CheckBox или RadioButtons, которые нельзя активировать с помощью Enter, но могут быть активированы с помощью Space, как если бы вы нажмете на него.

В заключение, Space будет официальным MouseClick, так как он имеет те же самые эффекты, что и нажатие или отпускание MouseClick uppon. Enter будет своего рода ярлыком для щелчка одним кликом. Все, конечно, в идее дать больше возможностей самой клавиатуре.

Ответ 2

Вы видите два разных поведения, которые не связаны, за исключением того, что они имеют дело с событиями клавиатуры в winform.

Enter является особенным, потому что это клавиша для активации acceptButton формы. Фактически, вы пропустили другой ключ, который может влиять на кнопки: Esc - это cancelButton, и он также будет генерировать события.

Как объяснил PhaDaPhunk, Space является MouseClick для любого компонента, который принимает MouseClick, но я не нашел подробного объяснения. Я бы предположил, что это поведение по умолчанию для всех элементов управления. Руководство Microsoft по доступности, по-видимому, подразумевает, что это так в их разделе на навигации на основе клавиатуры

Кстати, эта ссылка на базовую базу поддержки Microsoft, похоже, показывает, что реализация пробела прошла с Button.Click на Button.MouseClick. Возможно, причина в этом по-разному.