Cómo capturar pulsaciones de teclas en .NET se controla utilizando Visual Basic .NET o Visual Basic 2005

Seleccione idioma Seleccione idioma
Id. de artículo: 320583 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo paso a paso se demuestra cómo capturar pulsaciones de teclas en controles de Windows Forms. Con el código de ejemplo de este artículo, puede interceptar cualquier pulsación de tecla individual. También puede interceptar combinaciones de teclas que incluyan CTRL y ALT. La tecla IMPR PANT no se ve afectada por esta técnica. Es posible que tampoco se capturen algunas pulsaciones en teclas adicionales, por ejemplo, las teclas que controlan un explorador Web o un reproductor de CD.

La mayoría de los casos, los eventos KeyUp , KeyDown y KeyPress estándar son suficientes para capturar y controlar las pulsaciones. Sin embargo, no todos los controles activan estos eventos en todas las pulsaciones de teclas bajo todas las condiciones posibles.

Por ejemplo, considere el control DataGrid : si no se ha asignado ningún dato a la cuadrícula, las teclas de dirección (izquierda, derecha, flecha arriba y flecha abajo) generan sólo el evento de KeyUp . Otras teclas, por ejemplo, A ó 4, activan los tres eventos. Si el control DataGrid muestra datos, ninguno de los eventos de teclado estándar se provocan para las teclas de desplazamiento. Pulsaciones de teclas como A 4 no provocar ningún evento, elevar sólo KeyUp o provocar todos los eventos de tres, dependiendo de qué 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 de este artículo se escriben para trabajar con DataGrid , porque éste es el control para el que esta característica se solicita con más frecuencia. Puede utilizar este mismo enfoque con otros .NET los controles.

Configurar la captura de pulsaciones de teclas

Para interceptar pulsaciones de teclas en un control de formularios Windows Forms, derive una clase nueva que se basa en la clase del control que desee. Reemplace el método de ProcessCmdKey . En este método reemplazado, se coloque el código para procesar las pulsaciones que desee capturar. El código de ejemplo siguiente es un ejemplo de la estructura básica de una clase como:
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 de mensaje contiene el mensaje de Windows, como 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.

Mediante el parámetro de mensaje no es obligatorio; puede omitir. Sin embargo, probar el mensaje es una práctica conveniente. En este ejemplo, se prueba WM_KEYDOWN para ver si se trata de un evento de pulsación de tecla. También se prueba WM_SYSKEYDOWN, para que sea posible detectar combinaciones de teclas que implican control de teclas (principalmente ALT y CTRL).

Para capturar teclas específicas, puede evaluar la keyCode comparándola con la enumeración Keys . El ejemplo de código siguiente muestra cómo capturar las pulsaciones de teclas flecha arriba, flecha abajo, TAB, CTRL+M y ALT+Z:
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
         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
				

Crear un ejemplo

En el ejemplo siguiente se muestra cómo capturar pulsaciones de teclas con el control DataGrid .
  1. Crear un nuevo proyecto de biblioteca de controles de Windows en Visual Basic .NET o en Visual Basic 2005.
  2. Ver las propiedades de la clase UserControl1 y cambie el nombre con MyDataGrid .
  3. Ver el código de la biblioteca de control y, a continuación, cambie la línea siguiente de código
    Inherits System.Windows.Forms.UserControl
    					
    al siguiente:
    Inherits System.Windows.Forms.DataGrid
    					
  4. Agregue el método siguiente a la clase MyDataGrid :
    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. Crear un nuevo proyecto de aplicación para Windows en Visual Basic .NET o en 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 formulario Windows Forms proyecto. Si el formulario se denomina Form1, los dos archivos que representan el formulario se denominan Form1.vb y Form1.Designer.vb. Escribir 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 se 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 diseñador se mezcle suyo con su 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):
    http://msdn2.microsoft.com/en-us/library/ms379584(vs.80).aspx
    Para obtener más información acerca de las clases parciales y los formularios Windows Forms Designer, visite el siguiente sitio Web de MSDN:
    http://msdn2.microsoft.com/en-us/library/ms171843.aspx
  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 la DLL que acaba de crear 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 de la cuadrícula 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.
    ' 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 deben capturarse (FLECHA ARRIBA, FLECHA ABAJO, TAB, CTRL+M y ALT+Z). El título del formulario se actualiza para mostrar la tecla que se pulsó.

Propiedades

Id. de artículo: 320583 - Última revisión: viernes, 11 de mayo de 2007 - Versión: 3.7
La información de este artículo se refiere a:
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic 2005
Palabras clave: 
kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB320583 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 320583

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com