DataGridView上如何覆盖回车键按下事件?

4

这个问题已经被问过很多次,但都没有找到答案。 我需要覆盖 datagridview 上的 Enter 键,使其不跳到下一行,而是允许我将输入的文本保存到数据库中。这需要在用户输入时对 textboxcells 进行操作。

使用:

Private Sub DataGridView1_mt_KeyDown(sender As Object, e As KeyEventArgs) Handles DataGridView1_mt.KeyDown

    If e.KeyCode = Keys.Enter Then
    ...

由于回车键不会在文本框单元格中触发,因此 keyup 函数无法使用,而它会太晚,因为程序已经跳转到下一个单元格。 keypress 函数与 keydown 函数存在相同的问题。

有什么想法可以检测回车键的按下并覆盖它吗?

更新: 如果选择了单元格,则可以检测到按下回车键,但是如果我正在输入文本框,则无法检测到按下回车键。(实际上,我需要检测用户何时完成输入并按下 Enter 键。)

Private Sub DataGridView1_EditingControlShowing(sender As System.Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1_mt.EditingControlShowing

    Dim tb As TextBox = CType(e.Control, TextBox)
    AddHandler tb.KeyDown, AddressOf TextBox_KeyDown

End Sub

Private Sub TextBox_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
    If e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Return Then

        MessageBox.Show("Success")    '''''DOES NOT WORK
    End If
    If e.KeyCode = Keys.Space Then

        MessageBox.Show("Success")    '''''WORKS
    End If
End Sub
3个回答

2
使用PreviewKeyDown事件替代KeyDown事件,将代码更改为以下内容:
Private Sub DataGridView1_EditingControlShowing(sender As System.Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1_mt.EditingControlShowing

    Dim tb As TextBox = CType(e.Control, TextBox)
    AddHandler tb.PreviewKeyDown, AddressOf TextBox_PreviewKeyDown

End Sub

Private Sub TextBox_PreviewKeyDown(ByVal sender As Object, ByVal e As PreviewKeyDownEventArgs)
    If e.KeyCode = Keys.Enter Or e.KeyCode = Keys.Return Then

        MessageBox.Show("Success")    '''''WILL WORK
    End If
    If e.KeyCode = Keys.Space Then

        MessageBox.Show("Success")    '''''WORKS
    End If
End Sub

这将捕获回车键点击,即使单元格处于编辑模式。

0

将代码改成这样,它就能工作了。

    If e.KeyCode = Keys.Down Then
        'code
    End If

已经尝试过了,不起作用。无论我检查哪个键,都没有触发 Keydown 事件。 - user2452250

0
你写的是 e.KeyCode=Keys.Return。 改成 e.KeyValue = Keys.Return。 它会起作用的。

不行,没有效果。回车键不会故意触发事件。它在复选框单元格上运行良好,但在文本单元格上不起作用。 - user2452250

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接