Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Contenido
Introduccin
Uso del evento KeyDown y KeyPress para navegar entre controles
Uso del evento KeyUp para detectar la combinacin de teclas
Introduccin
Los controles para Windows Forms proveen de eventos para el manejo de las acciones
del usuario con el teclado, estos eventos llegan a ser un poco diferentes entre s
dependiendo de la accin realizada por el usuario. Dichos eventos
son KeyPress,KeyDown y KeyUp, la diferencia entre estos son los argumentos que
reciben, para el primero se recibe la informacin del evento en una argumento del
tipo System.Windows.Forms.KeyPressEventArgs, que expone mtodos y propiedades
para saber si el evento ha sido manejado (handled) o el caracter que devuelve la tecla
presionada (KeyChar), este evento es til cuando se desea obtener el caracter que fue
presionado, por ejemplo para manejar la tecla Enter. Los otros dos
eventos, KeyDown yKeyPress tienen firmas idnticas, sin embargo, KeyDown sucede al
momento de presionar una tecla (cuando la tecla va hacia abajo) y KeyUp sucede al
momento de soltar la tecla (cuando la tecla va hacia arriba), ambos reciben
informacin del evento por medio de un argumento del
tipo System.Windows.Forms.KeyEventArgs, a diferencia de KeyPressEventArgs, este
tipo expone ms informacin sobre la accin del usuario, esta informacin est
contenida en distintas propiedades, por ejemplo Alt que indica si se presion la tecla
alt anlogamente se comportan las propiedades Control, Shift, etc. La secuencia en
que se lanzan los eventos es empezando por el KeyDown seguido el KeyPress y para
finalizar el KeyUp, es importante hacer notar que estos eventos se lanzan cada vez que
una tecla es presionada.
Podemos utilizar los eventos del teclado para distintas tareas, simplemente hay que
tener en cuenta en qu momento debemos evaluar la accin del usuario para tener
una ejecucin en el tiempo exacto y de manera transparente.
Este ejemplo utiliza TextBoxes para la demostracin, no es raro que sean los que en
este caso se utilicen ya que el objetivo de usar la navegacin entre controles es para
agilizar la captura de datos aprovechando la experiencia de un gran nmero de
usuarios que utilizan la tecla Enter para pasar de un campo de captura a otro.
Utilizaremos bsicamente dos eventos de teclado, KeyDown ser utilizado para pasar el
enfoque del control en cuestin al siguiente control y el evento KeyPress se utilizar
para eliminar el beep que sucede la usar la tecla Enter cuando la accin del usuario
se ha manejado previamente en otro evento. Tambin, aprovechando el camino que
estamos trazando, veremos un principio bsico de la reutilizacin de eventos para la
misma familia de controles el mismo principio se aplica para la creacin de
componentes de procesos de interfase de usuario que en otra ocasin podremos
discutir con ms detalle.
Pues bien, debemos crear lo que ser nuestro proyecto de prueba llamado Ejemplo01,
utilizaremos Visual Studio para crear un nuevo proyecto de aplicacin para Windows.
1.
2.
3.
C
Form
TextBox
TextBox
TextBox
Label
Label
Label
Button
Pues bien, tenemos ya el formulario que usaremos en este ejemplo. podemos entonces
continuar con el cdigo.
Empecemos con lo siguiente, definamos los eventos KeyPress y KeyDown en la seccin
de cdigo del formulario Form1. Para evitar repetir el mismo evento en cada uno de los
controles de texto, declararemos un mtodo que servir de controlador de evento para
los tres TextBoxes. Empecemos con el evento KeyPress.
Para crear los controladores de eventos
}
Cdigo en Visual Basic
Private Sub txt_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs)
End Sub
}
Cdigo en Visual Basic
Private Sub txt_KeyDown(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs)
End Sub
Hasta este momento tenemos declarados los controladores de los eventos, sin
embargo, no sern lanzados al momento de realizar alguna accin con el teclado,
esto es porque aun no se agregan los controladores de los eventos de cada TextBox
a sus respectivos eventos, esto lo veremos ms adelante, por el momento debemos
darle la funcionalidad general requerida para poder utilizarlos en todos los controles
de texto. Para esto definiremos en la primera lnea dentro de cada mtodo
controlador lo siguiente:
// Cdigo en C#
// Cdigo en C#
private void InitializeEvents()
{
//
// txtCampo1
//
this.txtCampo1.KeyPress += new
KeyPressEventHandler(txt_KeyPress);
this.txtCampo1.KeyDown += new KeyEventHandler(txt_KeyDown);
//
// txtCampo2
//
this.txtCampo2.KeyPress += new
KeyPressEventHandler(txt_KeyPress);
this.txtCampo2.KeyDown += new KeyEventHandler(txt_KeyDown);
//
// txtCampo3
//
this.txtCampo3.KeyPress += new
KeyPressEventHandler(txt_KeyPress);
this.txtCampo3.KeyDown += new KeyEventHandler(txt_KeyDown);
}
txtCampo1
AddHandler
txtCampo2
AddHandler
AddHandler
txtCampo3
AddHandler
AddHandler
End Sub
// Cdigo en C#
public Form1()
{
InitializeComponent();
InitializeEvents();
End If
Pues bien, ya solo queda ejecutar el proyecto y hacer las pruebas correspondientes.
Con esto concluye el ejemplo sobre la navegacin entre controles, espero en lo
personal que sea til y satisfaga una de las dudas ms frecuentes sobre la navegacin
de controles.
1.
2.
Seguiremos utilizando nuestro proyecto Ejemplo01 para mostrar una de las maneras
de utilizar el evento KeyUp.
{
}
Cdigo en Visual Basic
Private Sub ctrl_KeyUp(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyEventArgs)
End Sub
Como se puede apreciar, el evento ahora tiene el prefijo ctrl en vez de txt, y es
con el objetivo de indicar que el controlador de evento podr ser utilizado por
cualquier control que soporte los eventos del teclado, ahora veremos cmo cambia
la conversin de sender para que esto sea posible. Recordemos que los controles se
crean a partir de clases heredadas deControl, esta clase expone la mayora de las
propiedades que se ven en los controles que utilizamos en nuestro proyecto de
ejemplo, as pues, la conversin ser ms general.
// Cdigo en C#
Control ctrl = sender as Control;
//
// btnSalir
//
this.btnSalir.KeyUp +=new KeyEventHandler(ctrl_KeyUp);
txtCampo1
txtCampo2
txtCampo3
btnSalir
opcin para validar la accin del usuario, esta es mediante la comparacin lgica,
esta opcin es ms eficiente pues evita el uso de la clase Convert, en este caso sera
recomendable usar esta opcin en lugar de la anterior.
// Cdigo en C#
if (Convert.ToInt32(e.KeyData) == Convert.ToInt32(Keys.Alt) +
Convert.ToInt32(Keys.Control) + Convert.ToInt32(Keys.B) )
{
if(ctrl.BackColor.ToString() == Color.Navy.ToString())
{
ctrl.BackColor= new Color();
}
else
{
ctrl.BackColor = Color.Navy;
}
}
// Segunda opcin en C#
if (e.Alt && e.Control && e.KeyCode==Keys.B)
{
if(ctrl.BackColor.ToString() == Color.Navy.ToString())
{
ctrl.BackColor= new Color();
}
else
{
ctrl.BackColor = Color.Navy;
}
}
1.
2.
Conclusin
Hemos visto en este artculo la manera de utilizar los eventos del teclado para dar
solucin a aquellas preguntas que tanto se hacen en los foros. Debemos tener en
consideracin distintos aspectos, uno de ellos es tener cuidado de no utilizar
combinaciones de teclas que utilice el sistema operativo como ctrl + alt + supr, alt +
tab, tambin ver que combinaciones de teclas se utilizan para cierto caracteres, por
ejemplo, ctrl + alt + Q (Esp. Latam) ctrl + alt + 2 (Espaa) devuelven la arroba @.
Pues bien, teniendo en cuenta esto no creo que exista ms problema, espero sea til la
informacin de este artculo.
Posted in C#, .NET Framework, WinForms