Hola Schuster:
Mira, yo hice en un formulario, una función que llama a todas las cajas de texto que agrupo después del Handles: La función la llamé "LasComaPunto" y le aplico el evento KeyPress como podrás observar. Si el usuario apreta la tecla Enter, llevo al foco según puedes ver en el Select Case de cada uno. Fijate como la variable local objTextBox irá a representar a la CajaTexto de origen. Si pulsa retroceso u otra tecla, en el If End If tiene su efecto, como podrás observar. Aprovecho e.Handled para permitir o no el efecto de la tecla pulsada. No sé si esta función cubrirá tus necesidades específicas, pero seguro que algún provecho le encontrarás. Estudiala bien, paso a paso y consultá con el Help. Suerte. Bernardo (
[email protected]), Córdoba, Argentina.
Private Sub LasComaPunto_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) _
Handles ctUnidades.KeyPress, ctPrecioUnitario.KeyPress, ctPctoDescuento.KeyPress, ctPctoImpuesto.KeyPress
' Ceballos2, 213
Dim objTextBox As TextBox = CType(sender, TextBox)
If e.KeyChar = Convert.ToChar(13) Then ' se pulsó <Enter>
Select Case objTextBox.Name
Case Is = "ctUnidades"
Me.ctPrecioUnitario.Focus()
Case Is = "ctPrecioUnitario"
Me.ctPctoDescuento.Focus()
Case Is = "ctPctoDescuento"
Me.ctPctoImpuesto.Focus()
Case Is = "ctPctoImpuesto"
Me.btAgregar.Select()
End Select
ElseIf e.KeyChar = Convert.ToChar(8) Then ' se pulsó <Retroceso>
e.Handled = False ' Handled = True, no permite; = False, si permite...
ElseIf (e.KeyChar = ","c) Then
e.KeyChar = "."c ' le cambio la "," por el "." para que sólo exista "." siempre
Dim ctrl As TextBox = DirectCast(sender, TextBox) ' Option Strict está en On
If (ctrl.Text.IndexOf("."c) <> -1) Then ' sólo puede haber un punto
' Sólo puede haber un punto; O sea, no deja poner otro punto
e.Handled = True
End If
ElseIf (e.KeyChar = "."c) Then
Dim ctrl As TextBox = DirectCast(sender, TextBox)
' Si no es "-1" es porque encontró ya un "."
If (ctrl.Text.IndexOf("."c) <> -1) Then ' sólo puede haber un punto
' Sólo puede haber un punto; O sea, no deja poner otro punto
e.Handled = True
End If
ElseIf (e.KeyChar < "0"c Or e.KeyChar > "9"c) Then
' desechar los caracteres que no son dígitos (0 - 9)
e.Handled = True
End If
End Sub