VB.NET 2008/VB - 데이터 그리드 뷰

DataGridView에서 Enter키를 누르면 옆의 셀로 포커스 이동

본클라쓰 2012. 9. 25. 11:09

 

Enter키를 누르면 옆의 셀로 포커스를 이동시키는 DataGridView를 만들기 위해서는 ProcessDataGridViewKey 메서드와 ProcessDialogKey 메서드를 사용해야 합니다. ProcessDataGridViewKey 메서드는 누른 키에 적합한 키 처리 메서드를 호출하는데, 방향키를 처리하는 것이 ProcessDialogKey 메서드입니다. ProcessDataGridViewKey 메서드를 재정의할 때는 True를 반환하여 키가 처리되었음을 나타내야 하는데, 컨트롤에서 처리되지 않는 키의 경우 기본 결과를 반환시키면 됩니다.

 

 

Public Class CustomDataGridView
    Inherits DataGridView

 

 

    Protected Overrides Function processdialogkey(ByVal keydata As Keys) As Boolean

        ' extract the key code from the key value.
        Dim key As keys = keydata And keys.keycode

        ' handle the enter key as if it were a right arrow key.
        If key = keys.enter Then
            Return Me.processrightkey(keydata)
        ElseIf key = keys.tab Then
            'return me.proce
        End If

        Return MyBase.processdialogkey(keydata)

    End Function

 

 

    Protected Overrides Function ProcessDataGridViewKey(ByVal e As System.Windows.Forms.KeyEventArgs) As Boolean

        ' Handle the ENTER key as if it were a RIGHT ARROW key.
        If e.KeyCode = Keys.Enter Then
            Return Me.ProcessRightKey(e.KeyData)
        End If

        Return MyBase.ProcessDataGridViewKey(e)

    End Function


End Class

 

위 상속으로 구현된 DataGridView를 사용하여 엔터키가 눌리면 옆으로 포커스가 이동됩니다.

 

이때 컬럼의 마지막 열에서 엔터키가 눌려도 내려가지 않는데, 이럴 때 마지막 열에서 엔터키가 눌리면 아래로 내려가게 하기 위해 ProcessDialogKey 메서드에 다음과 같은 코드를 추가하면 됩니다.

 

    Protected Overrides Function processdialogkey(ByVal keydata As Keys) As Boolean

        ' extract the key code from the key value.
        Dim key As keys = keydata And keys.keycode

       
        ' handle the enter key as if it were a right arrow key.
        If key = Keys.Enter Then
            ' 컬럼 수는 1부터 시작하고, 인덱스는 0부터 시작한다.
            If (Me.ColumnCount - 1 = Me.CurrentCell.ColumnIndex) Then
                Return Me.ProcessDownKey(keydata)
            End If

            Return Me.ProcessRightKey(keydata)
        ElseIf key = Keys.Tab Then
            'return me.proce
        End If

 

        Return MyBase.processdialogkey(keydata)

    End Function