Matthew Matthew - 24 days ago 15
Vb.net Question

How to capture arrow keys in datagridview cell end edit in VB.net

Here is my code for Cell End Edit and Selection Changed event:

Private Sub dvJOBranch_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dvJOBranch.CellEndEdit

'get the current column and row index
curCol = e.ColumnIndex
curRow = e.RowIndex

'if the cell is blank, set it to zero
If IsDBNull(dvJOBranch.Rows(curRow).Cells.Item(curCol).Value) Then
dvJOBranch.Rows(curRow).Cells.Item(curCol).Value = 0

'convert it to integer
Else
dvJOBranch.Rows(curRow).Cells.Item(curCol).Value = _
Convert.ToInt32(dvJOBranch.Rows(curRow).Cells.Item(curCol).Value.ToString())
End If



'if the user do mouseclick in datagridview
isMouseClick = dvJOBranch.Capture.ToString()

'if the user does not click any cell from the datagridview
If isMouseClick = False Then

isEdited = True
iColumnindex = e.ColumnIndex
irowindex = e.RowIndex

If dvJOBranch.CurrentRow.Index = dvJOBranch.RowCount - 1 Then
If dvJOBranch.CurrentCell.ColumnIndex < dvJOBranch.ColumnCount - 1 Then
dvJOBranch.CurrentCell = dvJOBranch.Item(iColumnindex + 1, irowindex)
End If
isEdited = False
End If

End If



End Sub

Private Sub dvJOBranch_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dvJOBranch.SelectionChanged

'if the user does not click any cell from the datagridview
If isMouseClick = False Then

If isEdited Then
If dvJOBranch.CurrentCell.ColumnIndex < dvJOBranch.ColumnCount - 1 Then
dvJOBranch.CurrentCell = dvJOBranch.Item(iColumnindex + 1, irowindex)
Else
dvJOBranch.CurrentCell = dvJOBranch.Item(2, irowindex + 1)
End If
isEdited = False
End If


End If

'set it to false
isMouseClick = False

End Sub


The function of this code is to move the current cell to the right after editing using ENTER key, In my code I also capture the mouse click if the user click any cell because it has errors If i do not capture the mouse click, What I'm trying to do now is to capture the Arrow keys while I'm editing. Because after editing a cell, for example when I press Arrow key UP, it moves to the right like the Function for my ENTER key instead of moving upward.

Any help and guide will be appreciated, Thank you

Answer

You could be using the KeyUp event of the datagridview like this :

Private Sub dvJOBranch(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles dvJOBranch.KeyUp
    If e.KeyCode = Keys.Up Then
        ' Do your code here
    End If
End Sub

And if you want the enter key to be handled in there you could just use a select case also :

 Private Sub dvJOBranch(sender As Object, e As System.Windows.Forms.KeyEventArgs) Handles dvJOBranch.KeyUp
    Select Case e.KeyCode
        Case Keys.Enter
            ' Code for enter
        Case Keys.Up
            ' Code for up arrow
            'Etc
    End Select
End Sub