Para detectar las pulsaciones realizadas dentro de un determinado control debemos definir las operaciones a realizar dentro del manejador del evento correspondiente (keydown, keyup, keypress, etc.) para ese control.
Private Sub TextBox1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress
If e.KeyChar >= ChrW(48) And e.KeyChar <= ChrW(57) Then
MessageBox.Show(("TextBox.KeyPress: '" +
e.KeyChar.ToString() + "' pulsado."))
Select Case e.KeyChar
Case ChrW(49), ChrW(57)
MessageBox.Show(("TextBox.KeyPress: '" +
e.KeyChar.ToString() + "' absorbido."))
e.Handled = True
End Select
End If
End Sub
If e.KeyChar >= ChrW(48) And e.KeyChar <= ChrW(57) Then
MessageBox.Show(("TextBox.KeyPress: '" +
e.KeyChar.ToString() + "' pulsado."))
Select Case e.KeyChar
Case ChrW(49), ChrW(57)
MessageBox.Show(("TextBox.KeyPress: '" +
e.KeyChar.ToString() + "' absorbido."))
e.Handled = True
End Select
End If
End Sub
Sin embargo, si queremos detectar la pulsación de las teclas en el formulario debemos hacer algunas modificaciones. En primer lugar, debemos poner a True la propiedad KeyPreview del formulario. Además, debemos definir el código de las acciones a realizar en el manejador de eventos del formulario. De este modo, las teclas pulsadas serán detectadas primero por el formulario y después se pasarán a los distintos controles, salvo que dentro del manejador del evento correspondiente se defina la propiedad e.Handled = true.
Sub Form1_KeyPress(ByVal sender As Object, ByVal e As KeyPressEventArgs) Handles Me.KeyPress
...
End Sub
...
End Sub
Incluso haciendo estos ajustes existen casos en los que las teclas no alfanuméricas pueden no ser detectadas. Para estos casos es recomendable sobreescribir la función ProcessCmdKey. En este caso no es necesario establecer la propiedad del formulario KeyPreview a True. Si esta función devuelve True el evento detectado será consumido por esta función y no será recibido por el control que tenga el foco en ese momento.
Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean
If keyData = Keys.Up Then
MessageBox.Show("Flecha arriba pulsada")
Return True
End If
If keyData = Keys.Down Then
MessageBox.Show("Flecha abajo pulsada")
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
If keyData = Keys.Up Then
MessageBox.Show("Flecha arriba pulsada")
Return True
End If
If keyData = Keys.Down Then
MessageBox.Show("Flecha abajo pulsada")
Return True
End If
Return MyBase.ProcessCmdKey(msg, keyData)
End Function
No hay comentarios:
Publicar un comentario