Aplicación 5: Usando KeyChar, Pasar foco de un TextBox a otro al presionar Enter
Nos ha pasado muchas veces que al tener un formulario con muchos TextBox tenemos que escribir en uno y luego tomar el mouse y dar clic en el otro TextBox para seguir escribiendo y asi sucesivamente si tenemos más, lo que complica o hace muy tedioso en el uso de la aplicación y por lo tanto necesitamos que al terminar de escribir en un TextBox al presionar una tecla en especifico nos saltemos al otro TextBox sin necesidad de perder el tiempo en tomar el mouse. En este caso se utiliza la tecla ENTER.
Ahora, la pregunta es ¿cómo hacer que eso suceda?
Sencillo, necesitamos trabajar un código que se ejecute al presionar la tecla ENTER, y dicho código lo usaremos en un evento llamado KEYPRESS, pero primero, quienes tenemos un conocimiento a medias de programación, posiblemente podriamos saber qué es, qué significa o para qué sirve el evento «KEYPRESS«. Pero por si no lo sabes:
- KEYPRESS es un evento que se produce cuando el usuario presiona y suelta una tecla.
Ahora el código que escribiremos en el evento KEYPRESS de los TextBox será el siguiente.
If Asc(e.KeyChar) = 13 Then TextBox1.Focus() End If
Como sabrás el valor en el codigo ASCII de la pulsación de la tecla ENTER es 13. En el argumento «e» se encuentran todos los eventos, procedimientos y funciones que estan en ejecución, como lo es el «KEYCHAR», que es la función que se encarga de devolvernos el caracter que ha sido digitado, este caracter es una variable de tipo string, por lo tanto necesitamos usar la función «Asc», que es la que se encarga de convertir en código ASCII cualquier caraácter que le enviemos a esta función. El «.Focus()» pasa el foco al control que necesitemos, ya sea un TextBox, un Button, RadioButton, etc.
Aca dejo una pequeña aplicación como ejemplo:
Las propiedades de los controles quedarán de esta forma
Su codigo es el siguiente:
Public Class Form1 'txtNombre en el evento KEYPRESS Private Sub txtNombre_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtNombre.KeyPress If Asc(e.KeyChar) = 13 Then txtApellido.Focus() End If End Sub 'txtApellido en el Evento KEYPRESS Private Sub txtApellido_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtApellido.KeyPress If Asc(e.KeyChar) = 13 Then txtTelefono.Focus() End If End Sub 'txtTelefono en el Evento KEYPRESS Private Sub txtTelefono_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtTelefono.KeyPress If Asc(e.KeyChar) = 13 Then txtDireccion.Focus() End If End Sub 'txtDireccion en el Evento KEYPRESS Private Sub txtDireccion_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtDireccion.KeyPress If Asc(e.KeyChar) = 13 Then btnIngresar.Focus() End If End Sub 'Boton que limpiara todos los textbox y pasa el foco al txtNombre Private Sub btnLimpiar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpiar.Click txtNombre.Text = "" txtApellido.Text = "" txtTelefono.Text = "" txtDireccion.Text = "" txtNombre.Focus() End Sub 'Boton para terminar la aplicación Private Sub btnSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalir.Click Me.Close() End Sub End Class
Para descargar el ejemplo Clic AQUI
Publicado el 6 junio, 2010 en .Net, Programación, Visual Basic, Windows y etiquetado en ASCII, Focus, KeyChar, KeyPress, programacion .net, Texbox. Guarda el enlace permanente. 25 comentarios.
Muchas gracias…….. por la ayuda del ejemplo me sirvieron de mucha ayuda……..
gracias por los codigos o ejemplos me sirvio de mucho y para mi trabajo ya no tengo que hacer tab para ir al siguiente muchas gracias.
si me podrias poner el codigo de los botones de acceso como por ejemplo solo quisiera presionar f1 y me diera guardar archivo f2 modificar f3 buscar etc te agradeceria muchisimo
gracias
eso es Facil, para utilizar las teclas F1-F12, tienes que poner este codigo en el evento KeyDown del textbox
Private Sub TextBox_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox.KeyDown
If e.KeyCode = Keys.F2 Then
‘Tu codigo para guardar, modificar o buscar
End If
End Sub
Solo cambia el Keys.F2 por la tecla que necesites, al escribir Keys. automaticamente te aparecerá la lista de las teclas. Tiene que ser en el KeyDown por que de otra forma no te detectará las pulsaciones de las teclas de Funcion.
Si vas a realizar una accion, dependiendo de la tecla buscada puedes cambiar el If e.keycode por algo asi
Select case e.KeyCode
case Keys.F2
Case Keys.F3
End select
buenisimo el ejemplo… mil gracias, justo lo que necesitaba.. 😀 😉
Buenas tardes pues a mi no me funciono, me puedes ayudar agarre y copie igual cambien por los campos de mi aplicación, y no dio
sigue cambiandose con el tab
tengo que cambiar algo mas
gracias
me olvide decir que trabajo con visual 2010
VISUAL BASIC 2010 YA PUEDES ORDENARLO DIRECTAMENTE ENCIMA DEL FORMULARIO DANDO CLICK DERECHO Y EN ORDEN DE TABULACION, ORDENA LOS TEXTBOX DE ARRIBA HACIA ABAJO COMO QIERAS QUE SE VAYAN ORDENANDO
y si tengo 50 textbox? tengo que programar 50 eventos keypress? debe haber otra forma
Amigo tu sabras como imprimir un palabra con un enter por desir
que al dar enter me ponga esta palabra y al dar cada enter se que es con el evento keypress pero no se como hacrelo si me puedes ayudar mi correo
ME SIRVIO DEMASIADO
Excelente, Muchas gracias por tu aportación.
Por lo menos agradecerte por la ayuda.. bien realizada la explicacion!
Con esta funcion no tienen que poner la funcion en cada texto :
Protected Overrides Sub OnKeyPress(ByVal e As System.Windows.Forms.KeyPressEventArgs)
MyBase.OnKeyPress(e)
If (e.KeyChar = ChrW(Keys.Enter)) Then
MyBase.ProcessDialogKey(Keys.Tab)
End If
End Sub
me sirvio de muvho, ok gracias por todo
gracias por la ayuda sabia hacer eso solo en visual basic 6.0 pero no me funcionaba en visual studio 2010, me sirvio gracias
bueno a mi parecer es un poco molesto estar escribiento el mismo escript en cada envento keypres de cada textbox que tengas. lo mas recomendable es crearte un nuevo control textbox y dentro de ese control en el evento keypres poner los siguiente. if e.keychar=chrw(13) then
sendkeys.send(«{TAB}»)
END IF
ten en cuenta que debaras ordernar el orden de tabulacion de cada control textbox que tengas para que asi cuando presiones enter en el textbox pase al siguiente control textbox en orden de tabulacion espero te sirva.
Gran aporte amigo, me fue de mucha tu ejemplo y tambien algunos de los comentarios. Muchas Gracias¡¡¡
muchas gracias me sirvió
Tengo 4 Textbox estan matrizado Text1(0),Txt1(1)…Text1(4). como hacer para pazar al siguiente presionando enter
Puedes encontrar la respuesta aquí:
http://enatorv.blogspot.com/2010/06/aplicacion-5-usando-keychar-pasar-foco.html
Gracias me sirvio de mucho
Me alegro mucho. Puedes visitar enatorv.blogspot.com es éste mismo blog pero he migrado a blogger. Saludos
if(e.KeyChar == 13)
txtPromedio.Focus();
trato de implementar el codigo en una macro en excel 2007 y al correo la macro me da error en la primera linea del codigo, ¿algo estoy haciendo mal? o ¿es que se debe tomar en cuenta otras lineas mas para este trabajo?
gracias de antemano por sus respuestas
¡Gracias!