Cómo capturar pulsaciones de teclas en controles .NET mediante Visual Basic .NET o Visual Basic 2005

Para una versión de Microsoft Visual C# .NET de este artículo, consulte
320584 .

EN ESTA TAREA

Resumen

En este artículo paso a paso se muestra cómo capturar pulsaciones de teclas en controles de formularios Windows Forms. Utilizando el código de ejemplo en este artículo, puede interceptar cualquier pulsación de tecla individual. También puede interceptar combinaciones de teclas como CTRL y ALT. La tecla Impr Pant no está afectada por esta técnica. Además, no se capturen algunas pulsaciones en teclas adicionales, como las teclas que controlan un explorador Web o un Reproductor de CD-ROM.

Para la mayoría de los propósitos, los eventos KeyUp, KeyDowny KeyPress estándar son suficientes para capturar y tratar las pulsaciones de teclas. Sin embargo, no todos los controles activan estos eventos para todas las pulsaciones de teclas en todas las condiciones.

Por ejemplo, considere el control DataGrid : si no se ha asignado ningún dato a la cuadrícula, las teclas de dirección (flecha izquierda, flecha derecha, flecha arriba y flecha abajo) sólo activan el evento KeyUp . Otras teclas, por ejemplo, A ó 4, activan los tres eventos. Si el
DataGrid está mostrando datos, ninguno de los eventos de teclado estándar se provocan para las teclas de desplazamiento. Las pulsaciones como A ó 4 no activan ningún evento, elevar sólo KeyUpo activan los tres eventos, dependiendo de lo que está seleccionado actualmente en el control. En estas situaciones, puede seguir los pasos de este artículo para capturar pulsaciones de teclas, independientemente del estado del control.


Los ejemplos de código en este artículo se escriben para trabajar con el control DataGrid, porque éste es el control para el que se solicita con más frecuencia esta característica. Puede utilizar este mismo enfoque con otros controles. NET.

Configurar la captura de clave

Para capturar las pulsaciones de teclas en un control de formularios Windows Forms, derive una nueva clase que se basa en la clase del control que desee. Reemplace el
Método ProcessCmdKey . En este método reemplazado, coloque el código para procesar las pulsaciones de teclas que desee capturar. El código de ejemplo siguiente es un ejemplo de la estructura básica de esta clase:
Class MyDataGrid    Inherits DataGrid

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

End Function
End Class


Implementar el método suplantado

El sistema pasa dos parámetros al método ProcessCmdKey : msg y keyData. El parámetro msg contiene el mensaje de Windows, por ejemplo, WM_KEYDOWN. El parámetro keyData contiene el código de la tecla que se presionó. Si también se presionó CTRL o ALT, el parámetro keyData contiene la información de ModifierKey.

Uso del parámetro msg no es obligatorio; puede ignorarlo. Es buena práctica, sin embargo, probar el mensaje. En este ejemplo, se prueba WM_KEYDOWN para comprobar que se trata de un evento de pulsación de tecla. También se prueba WM_SYSKEYDOWN, por lo que es posible capturar combinaciones de teclas que incluyen teclas de control (principalmente ALT y CTRL).

Para capturar teclas específicas, puede evaluar el valor de keyCode comparándola con la enumeración Keys . El ejemplo de código siguiente muestra cómo capturar las pulsaciones de tecla flecha arriba, flecha abajo, TAB, CTRL+M y ALT+Z:
Const WM_KEYDOWN As Integer = &H100Const WM_SYSKEYDOWN As Integer = &H104

If ((msg.Msg = WM_KEYDOWN) Or (msg.Msg = WM_SYSKEYDOWN)) Then
Select Case (keyData)
Case Keys.Down
Console.WriteLine("Down Arrow Captured")
Case Keys.Up
Console.WriteLine("Up Arrow Captured")
Case Keys.Tab
Console.WriteLine("Tab Key Captured")
Case (Keys.Control Or Keys.M)
Console.WriteLine("<CTRL> + m Captured")
Case (Keys.Alt Or Keys.Z)
Console.WriteLine("<ALT> + z Captured")
End Select
End If


Compilar un ejemplo

En el ejemplo siguiente se muestra cómo capturar pulsaciones de teclas con el control DataGrid .
  1. Cree un nuevo proyecto de biblioteca de controles de Windows en Visual Basic .NET o Visual Basic 2005.
  2. Ver las propiedades de la clase UserControl1y, a continuación, cambie el nombre a
    MyDataGrid.
  3. Ver el código de la biblioteca de Control y, a continuación, cambie la siguiente línea de código
    Inherits System.Windows.Forms.UserControl
    a la siguiente:
    Inherits System.Windows.Forms.DataGrid
  4. Agregue el método siguiente a la clase MiDataGrid :
    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, _                           ByVal keyData As Keys) As Boolean
    Const WM_KEYDOWN As Integer = &H100
    Const WM_SYSKEYDOWN As Integer = &H104

    If ((msg.Msg = WM_KEYDOWN) Or (msg.Msg = WM_SYSKEYDOWN)) Then
    Select Case (keyData)
    Case Keys.Down
    Me.Parent.Text = "Down Arrow Captured"
    Case Keys.Up
    Me.Parent.Text = "Up Arrow Captured"
    Case Keys.Tab
    Me.Parent.Text = "Tab Key Captured"
    Case (Keys.Control Or Keys.M)
    Me.Parent.Text = "<CTRL> + M Captured"
    Case (Keys.Alt Or Keys.Z)
    Me.Parent.Text = "<ALT> + Z Captured"
    End Select
    End If

    Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

  5. Genere el proyecto.
  6. Cree un nuevo proyecto de aplicación Windows en Visual Basic .NET o Visual Basic 2005. De forma predeterminada, se crea Form1.

    Nota: Debe cambiar el código en Visual Basic 2005. De forma predeterminada, Visual Basic crea dos archivos para el proyecto cuando se crea un proyecto de formularios Windows Forms. Si el formulario se denomina Form1, los dos archivos que lo representan se denominan Form1.vb y Form1.Designer.vb. Usted escribe el código en el archivo Form1.vb. El Diseñador de Windows Forms escribe el código en el archivo Form1.Designer.vb. El Diseñador de Windows Forms utiliza la palabra clave partial para dividir la implementación de Form1 en dos archivos independientes. Este comportamiento evita que el código generado por el diseñador se mezcle con el código.

    Para obtener más información acerca de las nuevas mejoras del lenguaje Visual Basic 2005, visite el siguiente sitio Web de Microsoft Developer Network (MSDN):Para obtener más información sobre las clases parciales y el Diseñador de Windows Forms, visite el siguiente sitio Web de MSDN:
  7. En el menú Herramientas , haga clic en Personalizar cuadro de herramientas.
  8. Haga clic en la ficha Componentes de.NET Framework .
  9. Haga clic en Examinar, busque el control o biblioteca DLL recién creada y, a continuación, haga clic en Aceptar.
  10. El control MyDataGrid aparece ahora en el cuadro de herramientas. Coloque uno en Form1. Nota: puede utilizar el código en los pasos restantes para crear datos de ejemplo en la cuadrícula para mostrar.

  11. Agregue el código siguiente al espacio de nombres del formulario. Puede colocar el código antes o después de la definición de clase del formulario.
    ' Structure is to provide sample data for the example.Public Structure gridData
    Private mmake As String
    Private myear As Integer

    Public Sub New(ByVal n As String, ByVal y As Integer)
    mmake = n
    myear = y
    End Sub

    Public Property Make() As String
    Get
    Return mmake
    End Get

    Set(ByVal Value As String)
    Make = Value
    End Set
    End Property

    Public Property Year() As Integer
    Get
    Return myear
    End Get
    Set(ByVal Value As Integer)
    myear = Value
    End Set
    End Property
    End Structure

  12. Agregue el código siguiente a la clase de formulario inmediatamente después de la sección "Código generado por el Diseñador de Windows Forms":
    protected dataArray(5) As gridData
  13. Agregue el código siguiente al evento Load de Form1:
    ' Create some sample data.dataArray(0) = New gridData("ford", 1999)
    dataArray(1) = New gridData("chevrolet", 1999)
    dataArray(2) = New gridData("plymouth", 1988)
    dataArray(3) = New gridData("honda", 1999)
    dataArray(4) = New gridData("fiat", 1987)

    ' Assign the data to the grid.
    MyDataGrid1.DataSource = dataArray

  14. Ejecute el ejemplo y pruebe las diversas pulsaciones de teclas que están siendo capturados (flecha arriba, flecha abajo, TAB, CTRL+M y ALT+Z). El título del formulario se actualiza para mostrar la tecla que se presionó.
Propiedades

Id. de artículo: 320583 - Última revisión: 17 ene. 2017 - Revisión: 1

Comentarios