keydown没有触发使用按钮输入键

时间:2018-05-01 17:03:11

标签: vb.net winforms events keydown

我正在创建一个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

但是,当用户按下回车键时,不会调用复制功能。它确实被调用键盘上的任何其他键,而不是输入键。但我真的只需要它来输入密钥。

我已经尝试将previewkeys设置为true并将表单上的accept按钮设置为此按钮,但它们都没有改变任何内容。

我也尝试过使用按键事件,但是再次没有检测到回车键。

1 个答案:

答案 0 :(得分:0)

当按钮具有焦点时,按 ENTER 键将引发ClickKeyUp事件。

TAB 将引发KeyUp事件,如果按下该键将使焦点到达按钮,但如果按下该按钮则将焦点移动到另一个控件。
/> 如果按 Shift + TAB 将焦点移至ButtonKeyUp事件将被提升两次。
仅当按 Shift + TAB 键将焦点移动到KeyDown顺序中的上一个控件时,才会引发TabIndex事件。 />

按钮具有焦点时按下任何其他键,将引发KeyUpKeyDown事件。

表单的KeyPreview属性不会改变此行为 除 Shift + TAB 键外,用于将Focus移动到上一个控件时。
在这种情况下,只会引发KeyDown事件。

如果Button是表单的AcceptButton CancelButton,按 ENTER ESC 键将会{{1} Button的事件。
如果还存在多行Click控件,这可能会导致问题,因为按 ENTER 键不会生成新行,因为此键不会引发TextBox事件,但只有KeyDown