1.- ) Como controlo la tecla [ ENTER ].
porque necesito esto esto?.
- Por que al hacer [ ENTER ] automaticamente me manda a la siguiente
fila de la misma columna - hay forma de evitar esto? - ya que lo que
yo nececito es que al presioanr [ ENTER ] recien me inicie la edicion
de la celda actual esto lo hago con
( DataGridView.CurrentCell.ColumnIndex.BeginEdit(True) , ya que el
modo de edicion esta con programación ).
En pocas palabras lo unico que quiero que haga el [ ENTER ] es
comenzar a editarme la celda actual.
2.-) Tecla [ ENTER ] cuando estoy editando.
- Como sabraban en la edicion del DataGridView se crea un TexBox, lo
que necesito es que al presionar la tecla [ ENTER ], el cursor vaya a
la siguiene columna de la misma fila.
ALGUEN ME PUEDE AYUDAR.!!!!!
Hola:
En el formulario donde se encuentre insertado el control DataGridView,
tienes que sobrescribir el m�todo ProcessCmdKey para interceptar la
pulsaci�n de la tecla Enter para establecer el foco en la celda que se
encuentre a la derecha de la celda actual. En los comentarios del ejemplo lo
explico:
Protected Overrides Function ProcessCmdKey( _
ByRef msg As System.Windows.Forms.Message, _
ByVal keyData As System.Windows.Forms.Keys) As Boolean
' Si la tecla presionada es distinta de la tecla Enter,
' abandonamos el procedimiento.
'
If keyData <> Keys.Return Then _
Return MyBase.ProcessCmdKey(msg, keyData)
' Igualmente, si el control DataGridView no tiene el foco,
' y si la celda actual no est� siendo editada,
' abandonamos el procedimiento.
'
If (Not DataGridView1.Focused) AndAlso _
(Not DataGridView1.IsCurrentCellInEditMode) Then _
Return MyBase.ProcessCmdKey(msg, keyData)
' Obtenemos la celda actual
'
Dim cell As DataGridViewCell = DataGridView1.CurrentCell
' �ndice de la columna.
'
Dim columnIndex As Int32 = cell.ColumnIndex
' �ndice de la fila.
'
Dim rowIndex As Int32 = cell.RowIndex
If columnIndex = DataGridView1.Columns.Count - 1 Then
If rowIndex = DataGridView1.Rows.Count - 1 Then
' Seleccionamos la primera columna de la primera fila.
'
cell = DataGridView1.Rows(0).Cells(0)
Else
' Selecionamos la primera columna de la siguiente fila.
'
cell = DataGridView1.Rows(rowIndex + 1).Cells(0)
End If
Else
' Seleccionamos la celda de la derecha de la celda actual.
'
cell = DataGridView1.Rows(rowIndex).Cells(columnIndex + 1)
End If
' Establecemos la celda actual...
'
DataGridView1.CurrentCell = cell
' ... y la ponemos en modo de edici�n.
'
DataGridView1.BeginEdit(True)
Return True
End Function
Se comprende que el valor de la propiedad EditMode del control DataGridView
se encuentra establecida en �DataGridViewEditMode.EditProgrammatically�.
Como tanto el pasar el foco a la columna de la derecha, como el iniciar el
modo de edici�n de la celda, lo deseas hacer cuando se pulse la tecla Enter,
tal y como est� implementado el ejemplo que te he indicado, har� que la
celda actual SIEMPRE se encuentre en modo de edici�n. Para abandonar dicho
modo, simplemente tienes que pulsar la tecla Escape.
Un saludo y �Feliz Navidad!
--
Enrique Mart�nez
[MS MVP - VB]
Nota informativa: La informaci�n contenida en este mensaje, as� como el
c�digo fuente incluido en el mismo, se proporciona �COMO EST��, sin
garant�as de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en pr�ctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.
' DataGridView1.EditMode = _
DataGridViewEditMode.EditProgrammatically
Porque cada vez que el foco se encuentre en el control DataGridView, y se
pulse la tecla Enter, autom�ticamente se pondr� en modo de edici�n la celda
actual del control DataGridView.