捕获Datagridview单元Kepress事件

Fur*_*gal 2 vb.net

谁能给我代码示例如何捕获datagridview单元按键事件?Datagridview_keypress没有帮助。

谢谢

bma*_*ger 5

根据Fco Navarro的回答,除了使用e.Control并不总是可行,因为e传递给EditingControlShowing事件ByVal意味着对控件的任何更改(例如,更改.Text属性)都不会反映在DataGridView中。如果您需要对事件处理程序中的实际TextBox控件执行任何操作,则可以使用DataGridView1.EditingControl代替e.Control

Private WithEvents txtNumeric As New DataGridViewTextBoxEditingControl

Private Sub DataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
    txtNumeric = CType(DataGridView1.EditingControl, DataGridViewTextBoxEditingControl)
End Sub

Private Sub txtNumeric_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles txtNumeric.KeyPress
    txtNumeric.Text = txtNumeric.Text.ToUpper()
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 抱歉@DevDave 自从我写这个答案以来已经有一段时间了 - 在将 txtNumeric 设置为当前控件之前,您不能测试 DataGridView1_EditingControlShowing 中的列名或索引吗?如果我没记错的话,sender 对象参数应该是 DataGridView 本身,在这种情况下,您应该能够使用 CurrentCell 属性来获取要测试的名称或索引。 (2认同)