Bien, respecto al problema que hay para capturar la tecla ENTER, presionada cuando estamos posicionados en una celda de un Datagrid de .NET, me decidí a crear una nueva clase Datagrid y sobreescribir el método ProcessCmdKey, que fue la solución que encontré para ello:
Código:
Private Const WM_KEYDOWN As Integer = &H100
Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
Select Case msg.Msg
Case WM_KEYDOWN
Select Case (keyData)
Case System.Windows.Forms.Keys.Enter
Try
AsignarOperarioSeleccionado()
Dim newCell As DataGridCell = New DataGridCell(Me.CurrentCell.RowNumber, Me.CurrentCell.ColumnNumber + 1)
Me.CurrentCell = newCell
Catch
End Try
Case Else
'MessageBox.Show(keyData.ToString())
End Select
End Select
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
Private Sub AsignarOperarioSeleccionado()
Dim NombreOperario As String = Me(Me.CurrentCell.RowNumber, Me.CurrentCell.ColumnNumber)
MessageBox.Show(NombreOperario)
End Sub
En el método AsignarOperarioSeleccionado, saco un MessageBox con el valor de la celda actual. Pues el problema es que me está sacando todavía el dato anterior y no el que acabo de escribir, supongo que porqué todavía no se ha grabado el nuevo dato.
Saben en qué evento debería preguntar por el nuevo valor? o mejor aún, saben si desde este mismo evento, puedo recuperar el texto actual escrito en la celda, aunque todavía no esté grabado en el datagrid?
Imagino que donde estoy escribiendo, aunque parezca que es una celda del Datagrid, debe ser una especie de textbox, que en algun punto, más tarde, pasará esos datos a la celda del grid realmente... Lo que creo que ocurre es que en el evento que estoy todavía no están pasados los datos... imagino... Espero me puedan orientar un poquito..
Gracias por su ayuda!
Saludos.