【问题标题】:Override keydown Enter on datagridview在datagridview上覆盖keydown Enter
【发布时间】:2014-04-04 08:02:44
【问题描述】:

This question has already been asked several times but none found an answer. 我需要覆盖 datagridview 上的 Enter 键,这样它就不会跳转到下一行,但允许我将输入的文本保存到数据库中。这需要在用户输入文本框单元格时完成。

使用:

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 键的按键并覆盖它吗?

更新: 如果选择了一个单元格,我可以检测到 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

【问题讨论】:

    标签: vb.net datagridview keypress overriding


    【解决方案1】:

    使用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
    

    即使单元格处于编辑模式,这也会捕获输入点击。

    【讨论】:

      【解决方案2】:

      像这样更改代码, 它有效。

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

      【讨论】:

      • 已经尝试过了,它不起作用.. Keydown 根本不会触发,无论我检查什么键
      【解决方案3】:

      你写成 e.KeyCode=Keys.Return 。 变成 e.KeyValue = Keys.Return 。 它会工作

      【讨论】:

      • 不,不工作。 Enter/Return 键不会故意触发事件。它在 checkboxcell 上运行良好,但在 textcell 上运行良好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 2018-10-11
      • 1970-01-01
      相关资源
      最近更新 更多