J'essaie de capturer la touche em> onglet em> dans une application Formulaires Windows et effectuez une action personnalisée lorsqu'il est enfoncé. P>
J'ai un formulaire avec plusieurs listviews et boutons, j'ai défini la propriété KeyPreview em> sur true et lorsque j'appuie sur une autre touche que l'onglet, mon gestionnaire d'événements de clé est appelé. p>
Mais ce n'est pas vrai avec la touche em> onglet em> - je ne reçois pas le message WM_KeyDown même dans WNDProc. P>
Dois-je définir chaque contrôle à l'intérieur de ma forme - sa Tabstop em> propriété - sur false? Il doit y avoir un moyen plus élégant que ça. P>
merci. p>
4 Réponses :
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
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.
Ceci est le code C # similaire au code VB donné dans la réponse ci-dessus ... espère que cela aide ... p> p>
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é?
Vous pouvez utiliser l'événement "PreviewKeydown" P>
Private Sub form1_KeyDown(.... ) Handles Me.KeyDown If e.KeyCode = Keys.Enter Then SendKeys.Send("{tab}") End If End Sub
Cela n'a vraiment rien à voir avec la question - vous interceptez la touche Entrée et envoyez-les après ...