Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

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

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
Para obtener 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 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.

Back to the top

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 FunctionEnd Class					
Back to the top

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 = &H100Const WM_SYSKEYDOWN As Integer = &H104If ((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 SelectEnd If				
Back to the top

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): Para obtener más información acerca de las clases parciales y los formularios Windows Forms Designer, 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 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 PropertyEnd 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ó.
Back to the top

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 320583 - Última revisión: 05/11/2007 07:08:50 - Revisión: 3.7

Microsoft Visual Basic .NET 2002 Standard Edition, Microsoft Visual Basic .NET 2003 Standard Edition, Microsoft Visual Basic 2005

  • kbmt kbvs2005swept kbvs2005applies kbhowtomaster KB320583 KbMtes
Comentarios
pendChild(m);