'' (c) Pep Lluis & Rafa Vargas
'' Ambos ejemplos vienen derivados de una inquietud compartida en
'' el ultimo Code Camp del Escorial en el 2006 entre Rafa Vargas y
'' Pep Lluis... no cabe duda del lema 'Comparte y Aprenderas'.
''
Public Class form1
Private WithEvents _MiDGView1 As New DgvPlus 'Mi DGV, que traduce el 'Enter' en 'Tab'
Private WithEvents _MiDGView2 As New MiDGView 'Mi DGV, que controla la posicion de la celda actual
'
' al lanzar nuestro form (en el momento de carga)
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
'
'Construir el primer DGV
_MiDGView1.Dock = DockStyle.Left 'Acoplarlo a la izquierda
_MiDGView1.ColumnCount = 4 'con cuatro columnas
_MiDGView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill 'Ajustarlo al tamaño
_MiDGView1.Columns(0).HeaderText = "Caso A" 'Etiquetar columna
Me.Controls.Add(_MiDGView1) 'Añadirlo al form
'
'Construir el segundo DGV
_MiDGView2.Dock = DockStyle.Right
_MiDGView2.ColumnCount = 4
_MiDGView2.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
_MiDGView2.Columns(0).HeaderText = "Caso B"
Me.Controls.Add(_MiDGView2)
'
'La ventana (aspecto)
Me.Width = Me._MiDGView1.Width + Me._MiDGView2.Width + 25 'Ajustar el ancho del form
Me.Text = "Pep/Rafa DataGridView" 'Ponerle titulo
End Sub
End Class
'
' Nuestra personalizacion para MiDGView ---------------------------------------------------------------
'
Public Class MiDGView
Inherits DataGridView 'Heredar del DataGridView
'
'Prepocesar mensajes
Public Overrides Function PreProcessMessage(ByRef msg As System.Windows.Forms.Message) As Boolean
If msg.Msg = 257 And msg.WParam.ToInt32 = 13 Then 'Si es 'KeyDown' y 'Enter'
Dim MiCol As Integer = 0
Dim MiFil As Integer = Me.CurrentCell.RowIndex - 1
If Me.CurrentCell.ColumnIndex < Me.ColumnCount - 1 Then 'Si noSalimos del limite
MiCol = Me.CurrentCell.ColumnIndex + 1 'Siguiente columna
End If
If MiFil > -1 Then Me.CurrentCell = Me(MiCol, MiFil) 'Posicionar columna
End If
Return MyBase.PreProcessMessage(msg)
End Function
End Class
'
' Nuestra personalizacion para DGVPlus ---------------------------------------------------------------
'
Public Class DgvPlus
Inherits DataGridView 'Heredar del DataGridView
'
'en el 'processDialogKey'... cuando estamos en edicion
Protected Overrides Function ProcessDialogKey(ByVal keyData As System.Windows.Forms.Keys) As Boolean
If keyData = Keys.Enter Then 'Si es 'enter'
SendKeys.Send(Chr(Keys.Tab)) 'Enviar un 'Tab'
Return True 'Marcar como procesado
Else 'en caso contrario
Return MyBase.ProcessDialogKey(keyData) 'devolver KeyData
End If
End Function
'
' en 'OnKeyDown'... cuando no estamos en edicion
Protected Overrides Sub OnKeyDown(ByVal e As System.Windows.Forms.KeyEventArgs)
If e.KeyData = Keys.Enter Then 'Si es 'enter'
SendKeys.Send(Chr(Keys.Tab)) 'Enviar un 'Tab'
Else
MyBase.OnKeyDown(e) 'Devolver el KeyEventArgs
End If
End Sub
End Class