【发布时间】:2015-07-01 21:33:28
【问题描述】:
我是第一次使用 DataGridView,虽然我有很多问题,但这个最新问题让我很烦恼。
问题总结:
我有一个 DataGridView (dgv),我定义了一组列。有些是只读的,有些是可编辑的。
对于可编辑的列,我需要发生四件事。
1) 允许数字输入
2) 最多允许 2 位数字
3)零填充任何条目
4) 我的问题:
如果用户输入一个两位数,我想检测到该数字并按 Tab 键转到下一列。我不能让它工作。
示例代码(省略了一些已知的工作项):
Private Sub dgvDiary_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles dgvDiary.EditingControlShowing
Dim txtEdit As TextBox = e.Control
txtEdit.MaxLength = 2
'remove any existing handler
RemoveHandler txtEdit.KeyPress, AddressOf txtdgvDiaryEdit_Keypress
AddHandler txtEdit.KeyPress, AddressOf txtdgvDiaryEdit_Keypress
End Sub
Private Sub txtdgvDiaryEdit_Keypress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
'Test for numeric value or backspace
If IsNumeric(e.KeyChar.ToString()) _
Or e.KeyChar = ChrW(Keys.Back) Then
e.Handled = False 'if numeric
Else
e.Handled = True 'if non numeric
End If
'If user typed in 2 characters, move on!
'Don't work!
If Strings.Len(Me.dgvDiary.Rows(Me.dgvDiary.CurrentRow.Index).Cells(Me.dgvDiary.CurrentCell.ColumnIndex).Value) = 2 Then
SendKeys.Send("{TAB}")
End If
End Sub
基本上在此活动期间,我无法看到输入时单元格的值“将是”。
我尝试添加“.RefreshEdit”和“.Commit”,但它们不起作用。
有什么方法可以测试这个事件中的代码,或者是否有一个事件可以在之后立即触发我可以使用?
【问题讨论】:
标签: vb.net winforms datagridview vb.net-2010