2010-03-17 8 views
11

Estoy tratando de capturar la tecla en una aplicación de Windows Forms y realizar una acción personalizada cuando se presiona.¿Cómo se intercepta la clave TAB de captura en la aplicación WinForms?

Tengo un formulario con varias listviews y botones, he establecido TeclaDePresentaciónPreliminar la propiedad del formulario en true y cuando se presiona cualquier tecla que no sea ficha, mi controlador de eventos KeyDown se consiga llamar.

Pero eso no es cierto con la tecla Tab - No recibo el mensaje WM_KEYDOWN incluso en WndProc.

¿Debo configurar cada control dentro de mi formulario - su propiedad TabStop - ¿a falso? Debe haber una manera más elegante que eso.

Gracias.

Respuesta

9

¿this te ayudará?

Protected Overrides Function ProcessCmdKey(ByRef msg As Message, ByVal keyData As Keys) As Boolean 
    Dim keyPressed As Keys = CType(msg.WParam.ToInt32(), Keys) 

    Select Case keyPressed 
    Case Keys.Right msgbox("Right Arrow Key Caught") 
    Case Keys.Left msgbox("LeftArrow Key Caught") 
    Case Keys.Up msgbox("Up Arrow Key Caught") 
    Case Keys.Down msgbox("Down Arrow Key Caught") 
    Case Else Return MyBase.ProcessCmdKey(msg, keyData) 
    End Select 
End Function 
+0

sí! Gracias. Por lo tanto, para completar, tuve que anular el evento ProcessCmdKey de Formulario y verificar si (KeyData & Keys.Tab) == Keys.Tab. – Axarydax

+1

Si bien esto puede responder teóricamente a la pregunta, [sería preferible] (http://meta.stackexchange.com/q/8259) incluir aquí las partes esenciales de la respuesta y proporcionar el enlace de referencia. –

28

Este es el código C# similar al código VB dado anteriormente enlace ...

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
    { 
     if (keyData == Keys.Tab) 
     { 
      //your code 
     } 
     return base.ProcessCmdKey(ref msg, keyData); 
    } 

Espero que esto ayude ...

+0

Sin duda me ayudó. Un voto favorable para proporcionar el código del idioma al que se ha etiquetado la pregunta. – Logarr

+0

@Logarr: Me alegro de que ayudó :-) – Ram

+0

Como respuesta aceptada pleeease. – TechNyquist

5

Puede utilizar Evento "PreviewKeyDown"

+0

esto es simplemente tan simple. ¡Gracias! – nawfal

-1
Private Sub form1_KeyDown(....) Handles Me.KeyDown 
    If e.KeyCode = Keys.Enter Then 
     SendKeys.Send("{tab}") 
    End If 
End Sub 
+0

que realmente no tiene nada que ver con la pregunta - interceptas la tecla Enter y luego envías Tab ... – Axarydax

Cuestiones relacionadas