Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DataGridView control de tecla pulsada

85 views
Skip to first unread message

Francizk0

unread,
Dec 3, 2009, 4:53:05 PM12/3/09
to
Q tal gente
abver si me apoyan con esta tengo un DataGridView en la cual mencesito
q al presionar [ENTER] no salte a la siguiente fila lo que yo quiero
es q se quede en la misma celda y comenzar q editar esta celda o que
valla a otra columna en la misma fila.
me Conformo con que me apoyen con lo primero q no salte a otra fila al
presionar [ENTER].

He intentado algo como esto:

Private Sub hfgDato_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles hfgDato.KeyPress
Try
With hfgDato
Select Case .CurrentCell.ColumnIndex
Case 1
If Asc(e.KeyChar) = 13 Then e.Handled =
True:.BeginEdit(True)
End Select
'Asc(e.KeyChar) = Tecla Presionado
'MessageBox.Show(.CurrentCell.ColumnIndex.ToString)
End With
Catch ex As Exception

End Try
End Sub

Alguna Idea ???

SoftJaén

unread,
Dec 4, 2009, 8:03:11 AM12/4/09
to
"Francizk0" escribi�:

> abver si me apoyan con esta tengo un DataGridView en la cual mencesito

> q al presionar [ENTER] no salte a la siguiente fila ...

Si quieres modificar el comportamiento del control DataGridView cuando se
pulsa la tecla Enter, tienes que detectar qu� tecla se ha pulsado y actuar
en consecuencia. Por ejemplo, si deseas que al pulsar Enter el foco pase a
la celda de la derecha, en el procedimiento �ProcessCmdKey� ejecutar�as lo
siguiente:

Protected Overrides Function ProcessCmdKey( _
ByRef msg As System.Windows.Forms.Message, _
ByVal keyData As System.Windows.Forms.Keys) As Boolean

' 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)

' Si la tecla presionada es distinta de la tecla Enter,
' abandonamos el procedimiento.
'
If keyData <> Keys.Return 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

DataGridView1.CurrentCell = cell

Return True

End Function

Ni que decir tiene que dicho procedimiento lo tendr�s que incluir en el
formulario donde se encuentre incluido el control DataGridView cuyo
comportamiento deseas modificar.

Adapta el ejemplo a tus necesidades.

Un saludo

--
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.

0 new messages