нажатие клавиши не срабатывает при нажатии клавиши Enter с помощью кнопки - PullRequest
0 голосов
/ 01 мая 2018

Я создаю приложение winforms и просто пытаюсь использовать кнопку, чтобы позволить пользователю отправить форму. У меня есть следующий код для кнопки

With duplicate_button
    .Parent = action_box
    .TabIndex = 4
    .Width = 125
    .Top = 25
    .Left = (.Parent.Width / 2) - (.Width / 2)
    AddHandler .KeyDown, AddressOf duplicate
End With

Private Sub duplicate(sender As Object, e As KeyEventArgs)
     Console.Write(e.KeyCode)
End Sub

Однако дублирующая функция не вызывается, когда пользователь нажимает клавишу ввода. Он вызывается для любой другой клавиши на клавиатуре, но не для клавиши ввода. Но мне действительно нужно, чтобы он работал только для клавиши ввода.

Я уже пытался установить для кнопок предварительного просмотра значение true и установить кнопку подтверждения в форме для этой кнопки, но ни один из них ничего не изменил.

Я также пытался использовать событие нажатия клавиши, но снова клавиша ввода не обнаружена.

1 Ответ

0 голосов
/ 03 мая 2018

Когда у кнопки есть фокус, нажатие клавиши ENTER вызовет события Click и KeyUp.

TAB вызовет событие KeyUp, если нажатие этой клавиши приведет к тому, что фокус достигнет кнопки, но не при нажатии, чтобы переместить фокус на другой элемент управления.
Если нажать Shift + TAB , чтобы переместить фокус на Button, событие KeyUp будет вызвано дважды.
Событие KeyDown возникает только при нажатии клавиш Shift + TAB для перемещения фокуса на предыдущий элемент управления в порядке TabIndex.

Любая другая клавиша, нажатая, когда у кнопки есть Фокус, вызовет события KeyUp и KeyDown.

Свойство KeyPreview формы не изменит это поведение.
За исключением клавиш Shift + TAB , когда они используются для перемещения фокуса на предыдущий элемент управления.
В этом случае возникает только событие KeyDown.

Если кнопка является AcceptButton или CancelButton формы, нажатие клавиш ENTER или ESC поднимет Click событие кнопки.
Это может вызвать проблему, если также присутствуют многострочные элементы управления TextBox, поскольку нажатие клавиши ENTER не приведет к созданию новой строки, поскольку событие KeyDown не вызывается для этой клавиши, а только для KeyUp

...