J'ai déjàKeyPreview
valeur true dans les propriétés du formulaireL'événement KeyDown ne se déclenche pas avec .NET WinForms?
Je travaille sur un petit programme, et je vais avoir un problème où il semble que certains des contrôles sur l'intérieur de groupe sont des ne déclenche pas l'événement KeyDown sur mon formulaire lorsque j'appuie et relâche une touche fléchée, juste l'événement KeyUp. Est-ce qu'il y a quelque chose qui ne va pas dans mon code? En particulier, j'ai activé KeyPreview sur le formulaire et défini des points d'arrêt sur e.SuppressKeyPress = True
dans les deux sous-programmes, et seul celui de frmMain_KeyUp atteint le point d'arrêt.
J'ai ajouté dans les deux événements GroupBox en espérant que cela pourrait atténuer le problème, mais pas une telle chance. Cependant, j'ai un contrôle personnalisé sur le formulaire qui est spécifiquement codé pour ignorer ces touches, et le code fonctionne comme prévu.
Private Sub frmMain_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown, GroupBox1.KeyDown, GroupBox2.KeyDown
e.SuppressKeyPress = True
Select Case e.KeyCode
Case Keys.Left
ScrollDir = ScrollDir Or 1
Case Keys.Right
ScrollDir = ScrollDir Or 2
Case Keys.Down
ScrollDir = ScrollDir Or 4
Case Keys.Up
ScrollDir = ScrollDir Or 8
Case Else
e.SuppressKeyPress = False
End Select
tScroll.Enabled = True
tScroll_Tick(Nothing, Nothing)
End Sub
Private Sub frmMain_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyUp, GroupBox1.KeyUp, GroupBox2.KeyUp
e.SuppressKeyPress = True
Select Case e.KeyCode
Case Keys.Left
ScrollDir = ScrollDir And (Not 1)
Case Keys.Right
ScrollDir = ScrollDir And (Not 2)
Case Keys.Down
ScrollDir = ScrollDir And (Not 4)
Case Keys.Up
ScrollDir = ScrollDir And (Not 8)
Case Else
e.SuppressKeyPress = False
End Select
If ScrollDir = 0 Then tScroll.Enabled = False
End Sub
Le code dans le contrôle utilisateur « ignore » les pressions de touche est en tant que tel:
Private Sub TileDropDown_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
If e.KeyValue = 40 OrElse e.KeyValue = 38 OrElse e.KeyValue = 39 OrElse e.KeyValue = 37 Then
e.SuppressKeyPress = True
End If
End Sub
a établi un point d'arrêt dans le code de la commande qui l'ignore et voir si elle se déclenche au moins une fois – curtisk
Avec 'e.SuppressKeyPress = TRUE uncommented dans le Gestionnaire frmMain KeyDown, le sous-programme TileDropDown_KeyDown n'est jamais appelé. Avec cela commenté, le gestionnaire * est * appelé. – Sukasa