2014-04-04 53 views
3

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

使用:作为ENTER键并不在文本框细胞火

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

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

将无法​​正常工作。 Keyup可以工作,但由于程序已经跳到下一个单元,所以它迟到了。按键与Keydown有同样的问题。

任何关于如何检测输入键的按键并覆盖它的想法?

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

回答

0

改变这样的代码, 它的工作原理。

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

已经尝试过,它不工作.. Keydown根本没有触发,无论我检查什么密钥 – user2452250

+0

看到的代码,并尝试 –

+0

更新我的问题与额外的信息 – user2452250

0

你写成 e.KeyCode=Keys.Return。 更改为 e.KeyValue = Keys.Return。 它会工作

+0

nope不工作。输入/返回键不会故意激发事件。它在checkboxcell上工作正常,但不在文本单元上。 – user2452250

2

使用PreviewKeyDown事件而不是KeyDown,张e你的代码是这样的:

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 

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