2

Enterキーを押してTABのような別のセルに移動する私の作業コードは次のとおりです。

Private Sub dvFromAlloc_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles dvFromAlloc.KeyDown
    If e.KeyCode = Keys.Enter Then

        Dim colm As Integer = dvFromAlloc.ColumnCount - 1
        Dim row As Integer = dvFromAlloc.RowCount - 1
        Dim currCell As DataGridViewCell = dvFromAlloc.CurrentCell

        If currCell.ColumnIndex = colm Then
            If currCell.RowIndex < row Then
                'gets the next row and the first selected index
                dvFromAlloc.CurrentCell = dvFromAlloc.Item(0, currCell.RowIndex + 1)
            End If
        Else
            'move in next col in the current row
            dvFromAlloc.CurrentCell = dvFromAlloc.Item(currCell.ColumnIndex + 1,  currCell.RowIndex)
        End If

        e.Handled = True
    End If

End Sub

Private Sub dvFromAlloc_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dvFromAlloc.CellEndEdit
    isEdited = True
    iColumnindex = e.ColumnIndex
    irowindex = e.RowIndex
End Sub

Private Sub dvFromAlloc_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dvFromAlloc.SelectionChanged
    If isEdited Then
        isEdited = False
        dvFromAlloc.CurrentCell = dvFromAlloc.Item(iColumnindex + 1, irowindex)
    End If
End Sub

ここでの主な問題は、最後の行にいるときは、セルを編集した後、別のセルに移動する前に Enter キーを 2 回押す必要があることですが、他の行にいる場合は、編集後に Enter キーを 1 回だけ押します。次のセルに移動します。

ご協力ありがとうございました

4

1 に答える 1

2

これは、CellandEdit と SelectionChanged で編集したコードです。

Private Sub dvFromAlloc_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dvFromAlloc.CellEndEdit
    isEdited = True
    iColumnindex = e.ColumnIndex
    irowindex = e.RowIndex

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

End Sub

上記のコード (CellEndEdit) には、最初の If ステートメントがあります。現在の行インデックスが行数と等しい場合 (つまり、最後の行にいるかどうかを確認している場合)、2 番目の If ステートメントを実行します。

2 番目の If ステートメント: 現在の列インデックスが列数より小さい場合、現在のセルを次のセルに移動します。

Private Sub dvFromAlloc_SelectionChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles dvFromAlloc.SelectionChanged

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

    End If

上記のコード (SelectionChanged) では、If else ステートメントを挿入しました。現在のセル列インデックスが列数よりも小さい場合、最後の列に到達するまで次のセルに移動します。それ以外の場合、最後の列にいる場合は、現在のセルを列インデックス 1 に設定し、行インデックスを 1 にインクリメントして、次の行に移動します。

また、EditMode の DGV のプロパティを EditonKeystrokeOrF2 に変更します。

このコードは私にとっては完全に機能しています。keydown イベントのコードは変更しません。

于 2013-09-09T08:47:51.577 に答える