12
votes

Comment intercepter la clé de tabulation de capture dans l'application WinForms?

J'essaie de capturer la touche onglet dans une application Formulaires Windows et effectuez une action personnalisée lorsqu'il est enfoncé.

J'ai un formulaire avec plusieurs listviews et boutons, j'ai défini la propriété KeyPreview sur true et lorsque j'appuie sur une autre touche que l'onglet, mon gestionnaire d'événements de clé est appelé.

Mais ce n'est pas vrai avec la touche onglet - je ne reçois pas le message WM_KeyDown même dans WNDProc.

Dois-je définir chaque contrôle à l'intérieur de ma forme - sa Tabstop propriété - sur false? Il doit y avoir un moyen plus élégant que ça.

merci.


0 commentaires

4 Réponses :


9
votes

will Ce vous aidez ?

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 


2 commentaires

Oui! Merci. Ainsi, pour l'achèvement de l'achèvement, je devais remplacer le processus de processcmdkey de formulaire et vérifier si (keydata & keys.tab) == keys.tab.


Tandis que cela peut théoriquement répondre à la question, Ce serait préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien pour référence.



34
votes

Ceci est le code C # similaire au code VB donné dans la réponse ci-dessus ... xxx

espère que cela aide ...


4 commentaires

Certainement m'aidé. Un uppot pour fournir au code de la langue que la question a été étiquetée sous.


@Logarr: content que cela ait aidé :-)


Cet exemple continue la propagation. Vous devez retourner «true» à partir de processcmdkey pour arrêter une autre manipulation de la touche Presse, ce qui est souvent le comportement prévu (une seule chose le gère).


@RAM, est-il de toute façon savoir sur quel contrôle Tabkey a été enfoncé?



7
votes

Vous pouvez utiliser l'événement "PreviewKeydown"


0 commentaires

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

1 commentaires

Cela n'a vraiment rien à voir avec la question - vous interceptez la touche Entrée et envoyez-les après ...